我试图创建一个绑定到全局名称空间的对象,然后在该对象中创建引用自身的方法。我希望在创建对象并定义obj时创建所有方法,但是方法不是(基于底部的控制台输出)。 return this;是否不将方法本身返回给调用?还是我在obj函数内部调用this.methd的问题不正确?事先对不起,如果是重复的话,似乎类似的问题似乎不是我的全部,亲密但没有雪茄。

(function(window, undefined){
  var obj = function(){
    this.methd = function() {
      return this;
    };
  }
window.obj = obj;
})(window);

function defined(value) {
  var def = value ? 'pass' : 'fail';
  return def;
}
console.log(defined(obj))
console.log(defined(obj.methd))

//Output:
//pass
//fail

最佳答案

您正在将window.obj设置为对函数的引用。在该函数运行之前,不会在任何地方定义methd,无论该函数的内容或它返回什么。

如果将其作为构造函数调用以创建实例,则会定义methd,但仅在该特定实例上:

var b = new obj();
console.log(defined(b.methd)); //pass


或者,仅将函数作为普通函数调用将使用this的当前值(这是全局对象或window)并在该对象上创建methd函数:

obj();
console.log(defined(window.methd)); //pass

07-25 22:01
查看更多