好的,所以我认为我理解这一点(没有双关语意),但显然不是.
var Constructor = function () {
var internalFunction = function () {
return this === window;
};
this.myMethod = function () {
alert(internalFunction());
};
};
var myObj = new Constructor();
myObj.myMethod();
这警告是真的.为什么内部函数不能将此视为对象?相反,我必须使用alert(internalFunction.call(this));在myMethod中.
编辑:我正在寻找一个解释,为什么这是以这种方式分配,而不是像var self = this;等的解决方法.抱歉,如果我没有说清楚.
解决方法
在调用函数之前,这不受约束,并且取决于函数的调用方式.您可以将其视为隐式传递给函数的额外参数.
在这种情况下,问题是您使用internalFunction()调用internalFunction.通过调用函数作为方法(如foo.bar()或foo [“bar”]())或通过call()或apply()显式设置此值来设置此值.你的调用都没有,所以这将恢复为全局对象.
在保持internalFunction私有的同时在这种情况下实现所需的最简单方法是在构造函数内存储对此的引用:
var Constructor = function() {
var thisObj = this;
var internalFunction = function () {
return thisObj === window;
};
thisObj.myMethod = function () {
alert(internalFunction());
};
}