pet*_*gan 3 javascript ecmascript-6
我在一个函数中有两个类,由于某种原因,第二个函数this没有被正确识别。
类是Emitter和Receiver。
我想弄清楚为什么this这里没有被正确接收。日志包含在下面的代码中:
const chat = (messages) => {
class Emitter {
constructor(messages = []) {
this.messages = messages;
this.event = () => {};
}
setEvent(fn) {
this.event = fn;
}
trigger() {
this.messages.forEach(message => this.event(message));
}
}
class Receiver {
constructor() {
this.messages = [];
// this prints correctly here
---> Receiver { messages: [] }
console.log('this ===> ', this)
}
ping(message) {
console.log('this ===>', this)
// this here prints the following
this ===> Emitter {
messages: [ 'Hi', 'Hola', 'Bonjour', 'Hi' ],
event: [Function: ping] }
this.messages.push(message);
}
}
const myReceiver = new Receiver();
const myEmitter = new Emitter(messages);
myEmitter.setEvent(myReceiver.ping);
myEmitter.trigger();
return myReceiver.messages;
};
Run Code Online (Sandbox Code Playgroud)
小智 5
这this取决于调用它的范围,而不是它定义的范围。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
在调用 myEmitter.setEvent(myReceiver.ping) 中,只有函数 ping 被传递给 myEmitter,而不是它的作用域我的接收者。如果您想传递 myRevciever 范围,您可以将其绑定到函数调用。
myEmitter.setEvent(myReceiver.ping.bind(myReceiver));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |