2017-02-19 93 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) => { 
    // ... 
});