code: function watch(obj, _keyPath, m) {
      // can't watch length on Array - it is special...
      if (_keyPath === 'length' && Array.isArray(obj)) {
        return;
      }
  
      if (!_emberMetalPath_cache.isPath(_keyPath)) {
        _emberMetalWatch_key.watchKey(obj, _keyPath, m);
      } else {
        _emberMetalWatch_path.watchPath(obj, _keyPath, m);
      }
    }
docs: Starts watching a property on an object. Whenever the property changes,
  invokes `Ember.propertyWillChange` and `Ember.propertyDidChange`. This is the
  primitive used by observers and dependent keys; usually you will never call
  this method directly but instead use higher level methods like
  `Ember.addObserver()`
  
  @private
  @method watch
  @for Ember
  @param obj
  @param {String} _keyPath