我的对象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?
答案 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);
}
}

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