我有一个执行Facebook身份验证的第三方库,我需要传递一个回调处理程序。这很好,但在回调函数中它不能设置对象的其他参数。
我创建了这个简单的测试,并需要帮助来理解为什么第三种情况不起作用,以模拟我的应用程序中发生的事情。
const Test = {
uid: null,
test() {
this.testAgain(this.updateUID);
},
testAgain(updater) {
updater(7);
},
updateUID(id) {
this.uid = id;
}
};
alert(Test.uid); // expect null, got null
Test.updateUID(3);
alert(Test.uid); // expect 3, got 3
Test.test();
alert(Test.uid); // expect 7, got 3 ???
我很欣赏有关如何让第3个案例发挥作用的建议。我必须将该函数传递给Facebook auth库,当FB调用该函数时,它需要能够更新对象的参数。
答案 0 :(得分:2)
当您将该方法作为参数传递时,对该对象的引用将被剥离'可以这么说。因此,当您设置this.uid时,它会在不再“测试”的对象上设置属性。要保留参考,您可以使用bind
test() {
this.testAgain(this.updateUID.bind(this));
},