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

标签 javascript variables scope

我有一个执行 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/

相关文章:

javascript - 在 Js (JQuery) 中插入 PHP 变量

javascript - Jquery - 为什么我无法在 $.ajax 中访问/设置我的 var

javascript - 我如何结合 JQuery 选择器和变量来缩短代码以便于扩展?

javascript - 以坐标为中心绘制矩形

javascript - 在 d3 中显示仪表中的小数点

javascript - 了解如何在 React 组件中引用属性

javascript - NodeJS : how to create a flag

c - 为什么编译器会给我错误未使用的变量n?

javascript - javascript中对象的范围和它的上下文有什么区别?

javascript - jQuery.validate,具有多个条件的表单