OOP在嵌套的私有方法中使用Javascript'this'关键字

时间:2014-05-20 10:46:27

标签: javascript oop this

以下是一些示例代码:

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);
};

1 个答案:

答案 0 :(得分:2)

您无法在this.sendNOP中呼叫ExampleClass.initiate。您在connect中调用它。调用connectinitiate函数内部是无关紧要的。

您还没有使用任何上下文调用connect,因此上下文是默认对象(window)。