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