以下是一些示例代码:
ExampleClass = function()
{
this.initiate();
};
ExampleClass.prototype.initiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect();
};
ExampleClass.prototype.sendNOP = function()
{
console.info('Sending NOP...');
var callback = function()
{
console.info('Server responded to NOP. ZzzZzzzZzz...');
};
setTimeout(callback, 1500);
};
我很好奇为什么我无法在this.sendNOP()
中致电ExampleClass.initiate
,以便ExampleClass.initiate._connect()
将ExampleClass
的实例作为this
传递给{{1}它似乎将ExampleClass.sendNOP()
传递为window
。为什么呢?
修改
问题是,当我们致电this
时,我们只使用ExampleClass.initiate._connect()
,但未指定任何上下文。使用connect()
拨打ExampleClass.initiate._connect()
即可! .apply(this)
将上下文设置为.apply(this)
。
ExampleClass
最终代码
ExampleClass.prototype.appliedInitiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect.apply(this);
};
答案 0 :(得分:2)
您无法在this.sendNOP
中呼叫ExampleClass.initiate
。您在connect
中调用它。调用connect
在initiate
函数内部是无关紧要的。
您还没有使用任何上下文调用connect
,因此上下文是默认对象(window
)。