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

时间:2015-12-31 10:39:03

标签: javascript methods javascript-objects

我正在尝试创建一个绑定到全局命名空间的对象,然后在该对象中创建引用自身的方法。我希望在创建对象时创建所有方法,并定义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

1 个答案:

答案 0 :(得分:1)

您将window.obj设置为对功能的引用。在该函数运行之前,methd未在任何地方定义,无论该函数的内容或返回的内容如何。

如果您将其作为构造函数调用来创建实例,methd将被定义,但仅限于该特定实例

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

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

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