这是一些示例代码:
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
的instanceof作为this
传递给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);
};
最终代码
ExampleClass = function()
{
this.appliedInitiate();
};
ExampleClass.prototype.sendNOP = function()
{
console.info('Sending NOP...');
var callback = function()
{
console.info('Server responded to NOP. ZzzZzzzZzz...');
};
setTimeout(callback, 1500);
};
ExampleClass.prototype.initiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect(); // Won't work. connect() is not called from any context (ie. obj.connect() )
};
ExampleClass.prototype.appliedInitiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect.apply(this); // Will work, we are calling connect with apply, which sets the context to ExampleClass
};
最佳答案
您不能在this.sendNOP
中呼叫ExampleClass.initiate
。您正在connect
中调用它。对connect
的调用在initiate
函数内部是无关紧要的。
您尚未使用任何上下文调用connect
,因此上下文是默认对象(window
)。