Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JavaScript函数传递给对象中的另一个函数会丢失对象变量范围_Javascript_Variables_Scope - Fatal编程技术网

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

将JavaScript函数传递给对象中的另一个函数会丢失对象变量范围,javascript,variables,scope,Javascript,Variables,Scope,我有一个执行Facebook身份验证的第三方库,我需要向它传递一个回调处理程序。这很好,但是在回调函数中,它不能设置对象的其他参数 我创建了这个简单的测试,需要帮助理解为什么第三个案例不起作用,以模拟我的应用程序中正在发生的事情 const Test = { uid: null, test() { this.testAgain(this.updateUID); }, testAgain(updater) { updater(7); }, updateUID(id) {

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

我很感激关于如何让第三个案例发挥作用的建议。我必须将该函数传递到Facebook auth库,当FB调用该函数时,它需要能够更新对象的参数。

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


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


这起作用了。谢谢如果允许的话,我会在5分钟内接受答案。这很有效。谢谢如果允许的话,我会在5分钟内接受答案。
test() {
  this.testAgain(this.updateUID.bind(this));
},