也是如此
有人可以解释为什么此代码有效:
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
。
差异是在调用 on
时的 this
值。当功能称为对象的成员时,this
被绑定到对象。(MDN)当函数值称为独立变量时,this
在严格模式下绑定到全局对象或undefined
。(MDN)
为了解决问题,您必须bind
函数到适当的this
值。
const foo = this.firebaseRef.on.bind(this.firebaseRef);
foo('value', (snapshot) => {
// ...
});