2017-02-19 3 views
0

Kann jemand erklären, warum dieser Code funktioniert:reagieren nativen und Feuerbasis - Feuerbasis Funktion als Referenz

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

und dies nicht:

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

?

In reagieren-native devtools Debugger wirft er einen Fehler: Cannot read property 'Y' of undefined

Es ist schon komisch, denn wenn ich einen Haltepunkt setzen und überprüfen Sie es

foo === this.firebaseRef.on 

es mir wahr gibt. typeof foo ist eine Funktion. Ich verstehe es nicht. Das gleiche passiert mit once.

Antwort

2

Der Unterschied liegt darin, was der this Wert sein wird, wenn on aufgerufen wird. Wenn Funktionen als Mitglied eines Objekts aufgerufen werden, ist this an das Objekt gebunden. (MDN) Wenn Funktionswerte als eigenständige Variablen aufgerufen werden, ist this im strikten Modus an das globale Objekt oder undefined gebunden. (MDN)

Um das Problem zu beheben, müssen Sie bind die Funktion zum richtigen this Wert.

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