whole_func_string: function watchDataChange(expressOrFunc, callback, options) {
      if (typeof expressOrFunc === 'function') {
          expressOrFunc = this.__addComputedProp(expressOrFunc);
      }
  
      if (typeof callback === 'function') {
          let handlerName = getAnonymousWatcherName(this);
          this[handlerName] = callback;
          callback = handlerName;
      }
  
      return this.__watchDataChange(expressOrFunc, callback, options);
  }
func_code_string: function watchDataChange(expressOrFunc, callback, options) {
      if (typeof expressOrFunc === 'function') {
          expressOrFunc = this.__addComputedProp(expressOrFunc);
      }
  
      if (typeof callback === 'function') {
          let handlerName = getAnonymousWatcherName(this);
          this[handlerName] = callback;
          callback = handlerName;
      }
  
      return this.__watchDataChange(expressOrFunc, callback, options);
  }
func_documentation_string: Watch the given expression or function
  
  @param {string|Function} expressOrFunc the expression or function to watch
  @param {string|Function} callback the callback handler to execute when the
  expression or function value changes
  @param {Object=} options watch options
  @param {boolean=} options.immediate whether trigger the callback
  immediately with the current value of the expression or function
  optional, by default false
  @param {boolean=} optional.deep whether watch object nested value
  optional, by default false
  @return {*}