2017-02-19 64 views
0

有人可以解釋爲什麼這代碼工作:反應本地和火力點 - 火力功能作爲參考

this.firebaseRef.on('value', (snapshot) => {//...}); 

,這不:

const foo = this.firebaseRef.on; 
foo('value', (snapshot) => {//...}); 

在反應母語devtools調試器,它拋出一個錯誤:Cannot read property 'Y' of undefined

這很有趣,因爲當我設置一個斷點,並檢查它

foo === this.firebaseRef.on 

它給了我真實的。 typeof foo是一個函數。我不明白。 once也是如此。

回答

2

所不同的是,當on被稱爲this值將是什麼。當函數被作爲對象的成員調用時,this被綁定到對象。 (MDN)當功能值被稱爲作爲獨立變量,this勢必在嚴格模式的全局對象或undefined。 (MDN

爲了解決該問題,您必須將bind函數的值設置爲正確的this值。

const foo = this.firebaseRef.on.bind(this.firebaseRef); 
foo('value', (snapshot) => { 
    // ... 
});