docs: function propertyWillChange(obj, keyName) {
      var m = _emberMetalMeta.peekMeta(obj);
      var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length';
      var proto = m && m.proto;
      var possibleDesc = obj[keyName];
      var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
  
      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);
    }