gpt4 book ai didi

javascript - 将 JavaScript 函数传递给对象内的另一个函数会丢失对象变量范围

转载 作者:行者123 更新时间:2023-12-02 14:06:34 25 4
gpt4 key购买 nike

我有一个执行 Facebook 身份验证的第 3 方库,我需要向它传递一个回调处理程序。这工作正常,但在回调函数中它不能设置对象的其他参数。

我创建了这个简单的测试,需要帮助来理解为什么第三种情况不起作用,以模拟我的应用程序中发生的情况。

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 ???

我很欣赏有关如何使第三个案例发挥作用的建议。我必须将该函数传递给 Facebook 身份验证库,当 FB 调用该函数时,它需要能够更新对象的参数。

最佳答案

可以这么说,当您将该方法作为参数传递时,对该对象的引用将被“剥离”。因此,当您设置 this.uid 时,它会在不再是“Test”的对象上设置一个属性。要保留引用,您可以使用 bind

test() {
this.testAgain(this.updateUID.bind(this));
},

关于javascript - 将 JavaScript 函数传递给对象内的另一个函数会丢失对象变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40012046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com