2017-02-19 13 views
0

Может кто-то объяснить, почему этот код работает:реагируют родные и firebase - firebase функцию в качестве ссылки

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

Разница заключается в том, что означает значение this, когда вызывается on. Когда функции вызывается как член объекта, this привязан к объекту. (MDN) Когда значения функций называются автономными переменными, this привязан к глобальному объекту или undefined в строгом режиме. (MDN)

Чтобы устранить эту проблему, вы должны bind функцию надлежащего this значение.

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