为什么我不能为我所在范围内的函数创建方法?

Why can't I create a method to the function who's scope I'm within?

我正在尝试创建一个绑定到全局名称空间的对象,然后在该对象中创建引用自身的方法。我希望在创建对象时创建所有方法,并定义 obj,但方法不是(基于底部的控制台输出)。 return this; 不是 return 调用的方法本身吗?还是我调用 this.methd 的问题在 obj 函数内部不正确?如果这是重复的,我提前道歉,看起来类似的问题总体上不像我的,关闭但没有雪茄。

(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 不会在任何地方定义,无论该函数的内容或它是什么 returns。

如果您将其作为构造函数调用来创建实例,methd 将被定义,但仅在 那个特定实例上 :

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

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

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