code: function Observer(observations, expression, callback, callbackContext) {
    if (typeof expression === 'function') {
      this.getter = expression;
      this.setter = expression;
    } else {
      this.getter = expressions.parse(expression, observations.globals, observations.formatters);
    }
    this.observations = observations;
    this.expression = expression;
    this.callback = callback;
    this.callbackContext = callbackContext;
    this.getChangeRecords = false;
    this.skip = false;
    this.forceUpdateNextSync = false;
    this.context = null;
    this.oldValue = undefined;
    LinkedList.makeNode(this);
  }
docs: Defines an observer class which represents an expression. Whenever that expression returns a new value the `callback` is called with the value.  If the old and new values were either an array or an object, the `callback` also receives an array of splices (for an array), or an array of change objects (for an object) which are the same format that `Array.observe` and `Object.observe` return <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe>.