Javascript 在一个函数中包含两个类时出现此问题
我在一个函数中有两个类,由于某种原因,在第二个函数中,Javascript 在一个函数中包含两个类时出现此问题,javascript,ecmascript-6,Javascript,Ecmascript 6,我在一个函数中有两个类,由于某种原因,在第二个函数中,未正确识别此 这些类是发射器和接收器 我正在试图弄清楚为什么这里没有正确地拾取这个。该日志包含在以下代码中: const chat = (messages) => { class Emitter { constructor(messages = []) { this.messages = messages; this.event = () => {}; } setEvent(f
未正确识别此
这些类是发射器
和接收器
我正在试图弄清楚为什么这里没有正确地拾取这个。该日志包含在以下代码中:
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;
};
此
取决于调用它的范围,而不是定义它的范围。
在调用myMitter.setEvent(myReceiver.ping)时,只有函数ping被传递给myMitter,而不是它的作用域myReceiver。如果希望传递myRevciever作用域,可以将其绑定到函数调用
myMitter.setEvent(myReceiver.ping.bind(myReceiver))代码>只是补充这个答案:一种常见的做法是在构造函数中绑定类方法。调用对象“scope”是不正确的。你可以选择“目标”或“接收者”。