code: function propertyWillChange(obj, keyName) {
        var m = obj['__ember_meta__'];
        var watching = (m && m.watching[keyName] > 0) || keyName === 'length';
        var proto = m && m.proto;
        var desc = m && m.descs[keyName];
  
        if (!watching) { return; }
        if (proto === obj) { return; }
        if (desc && desc.willChange) { desc.willChange(obj, keyName); }
        dependentKeysWillChange(obj, keyName, m);
        chainsWillChange(obj, keyName, m);
        notifyBeforeObservers(obj, keyName);
      }
docs: .......................................................... PROPERTY CHANGES  
  This function is called just before an object property is about to change.
  It will notify any before observers and prepare caches among other things.
  
  Normally you will not need to call this method directly but if for some
  reason you can't directly watch a property you can invoke this method
  manually along with `Ember.propertyDidChange()` which you should call just
  after the property value changes.
  
  @method propertyWillChange
  @for Ember
  @param {Object} obj The object with the property that will change
  @param {String} keyName The property key (or path) that will change.
  @return {void}