如何使对象的函数或属性成为指向另一个对象函数的指针?

时间:2016-03-06 06:00:11

标签: javascript pointers object

我的对象testObj1包含一个数字和一个将递增并打印该数字的函数。

testObj1 = 
{
    testNum: 0,

    testFunc1: function()
    {
        this.testNum++;
        console.log(this.testNum);
    }
}

我还有一个带有空函数的对象testObj2和另一个将其参数赋给空函数的函数。

testObj2 = 
{
    testFunc2: function() {},

    assignFunc: function(newFunc)
    {
        this.testFunc2 = newFunc;
    }
}

现在我尝试将testFunc1分配给testFunc2并运行testFunc2。

testObj2.assignFunc(testObj1.testFunc1);

testObj2.testFunc2(); // Should output 1 but gives a NaN.

似乎testFunc2只是testFunc1的一个副本,并试图访问testOum不存在的testObj2中的testNum。如何让testFunc2成为一个指向testFunc1的指针,所以当我调用testFunc2时,它会调用包含testNum的testObj1中的testFunc1?

1 个答案:

答案 0 :(得分:0)

' this'在这种情况下,指的是调用站点(在这种情况下,因为还有其他选择)。您的主叫站点是testObj2,这意味着'这个'会参考它。如果需要,您始终可以像这样绑定第一个对象:

  

testObj2.assignFunc(testObj1.testFunc1.bind(testObj1);

您可能希望扩充您的assignFunc以获取两个值,即函数和' this'上下文并使用它:



testObj2 = 
{
    testFunc2: function() {},

    assignFunc: function(newFunc, altThis)
    {
        altThis = altThis || this;
        this.testFunc2 = newFunc.bind(altThis);
    }
}




顺便说一句,您可以直接分配给对象而无需赋值函数。