2016-10-13 5 views
0

Facebook認証を実行するサードパーティのライブラリがあり、コールバックハンドラに渡す必要があります。これは正常に動作しますが、コールバック関数ではオブジェクトの他のパラメータを設定することはできません。オブジェクト内の別の関数にJavaScript関数を渡すとオブジェクト変数のスコープが失われます

私はこの簡単なテストを作成しました。私のアプリで何が起こっているのかをシミュレートするために、なぜ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 ??? 

3番目のケースを動作させる方法についてのご意見をお待ちしております。関数をFacebookの認証ライブラリに渡す必要があります.FBがその関数を呼び出すときには、オブジェクトのパラメータを更新できる必要があります。

答えて

2

引数としてそのメソッドを渡すと、オブジェクトへの参照が話題になるため「取り除かれ」ます。だからあなたがthis.uidを設定するとき、それはもはや 'Test'ではないオブジェクトにプロパティを設定しています。あなたが使用できるリファレンスを保持するにはbind

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

これは機能しました。ありがとう。私は5分で答えることができます。 –

関連する問題