[英]Set event listeners in ES6 class definition that extends EventEmitter
我想要一些预定义的自定义侦听器,它们已经定义了类的定义 (就像'newListner'
事件中的构建一样)。 所以我不想只在构造函数中绑定它们,因为它将在该类的每个新实例上执行。
这该怎么做? 修改原型? 有可能吗?
到目前为止我所拥有的:
class Cat extends EventEmitter {
// just added for demonstration, I don't want this!
constructor() {
super();
// does fire
this.on('wave', function() { console.log('constructor wave'); });
}
}
// compiles but does not fire
Cat.prototype.on('wave', function() { console.log('prototype wave'); });
var cat = new Cat();
cat.emit('wave');
您无法避免为每个实例单独注册侦听器,并且在构造函数1,2中执行此操作的自然位置。 但是,您可以避免创建新的侦听器函数:
class Cat extends EventEmitter {
constructor() {
super();
this.on('wave', this.onWave);
}
onWave() {
console.log('prototype wave');
}
}
var cat = new Cat();
cat.emit('wave');
1:还有其他方法,比如._events
的getter。 你可以做各种各样的花哨的东西,包括“默认”听众的原型继承,但那些完全过于复杂,并迅速超越你的头脑。 你可以通过在构造函数中放入一些通用代码来做一些奇特的事情 - 而且更干净。
2:你也可以覆盖(特殊化)EventEmitters的init
方法,但它归结为完全相同。
因为,据我所知, Cat
发射器的多个实例无法相互通信,您必须在构造函数中为每个实例注册侦听器:
class Cat extends EventEmitter {
constructor() {
super();
this.on('wave', function() { console.log('constructor wave'); });
}
}
var cat = new Cat();
cat.emit('wave');
然后,您可以随时在整个不同的文件共享您的发射器实例由require
将其投入你需要它的脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.