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