code: function WilddogObject(ref) {
          if( !(this instanceof WilddogObject) ) {
            return new WilddogObject(ref);
          }
          // These are private config props and functions used internally
          // they are collected here to reduce clutter in console.log and forEach
          this.$$conf = {
            // synchronizes data to Wilddog
            sync: new ObjectSyncManager(this, ref),
            // stores the Wilddog ref
            ref: ref,
            // synchronizes $scope variables with this object
            binding: new ThreeWayBinding(this),
            // stores observers registered with $watch
            listeners: []
          };
  
          // this bit of magic makes $$conf non-enumerable and non-configurable
          // and non-writable (its properties are still writable but the ref cannot be replaced)
          // we redundantly assign it above so the IDE can relax
          Object.defineProperty(this, '$$conf', {
            value: this.$$conf
          });
  
          this.$id = $wilddogUtils.getKey(ref.ref());
          this.$priority = null;
  
          $wilddogUtils.applyDefaults(this, this.$$defaults);
  
          // start synchronizing data with Wilddog
          this.$$conf.sync.init();
        }
docs: Creates a synchronized object with 2-way bindings between Angular and Wilddog.
  
  @param {Wilddog} ref
  @returns {WilddogObject}
  @constructor