我有以下代码:
class classA {
constructor() {
createjs.EventDispatcher.initialize(classA.prototype);
this.addEventListener("someEvent", function(evt) {
console.log("classA has detected something has happened!");
});
}
}
class classB {
constructor() {
createjs.EventDispatcher.initialize(classB.prototype);
this.addEventListener("someEvent", function(evt) {
console.log("classB has detected something has happened!");
});
this.dispatchEvent("someEvent");
}
}
let a = new classA();
let b = new classB();
现在当我构造classA时,它被设置为侦听“someEvent”,但是当在classB的构造函数中调度“someEvent”时,只有classB注册该事件。
为什么会这样?
答案 0 :(得分:0)
这种情况正在发生,因为只有“ClassB”实例正在侦听“ClassB”实例调度的事件。创建课程时,您将:
ClassA实例不会捕获由ClassB实例调度的事件,因为每个类只监听自身的事件。
如果你想从ClassB捕获事件,你必须将其设置为执行此操作。
this
另请注意,您正在将EventDispatcher混合到构造函数中的 var a = new ClassA();
var b = new ClassB();
b.addEventListener("someEvent", a.someFunction);
。如果你想在原型中使用它,那么将它添加到构造函数之外 - 否则每次都会发生。如果你只想在一个实例上,那么将它放在构造函数中,但只需传递prototype
而不是this
。
Class.prototype
或者更好,只需扩展EventDispatcher。
class ClassB {
// stuff
}
createjs.EventDispatcher.initialize(ClassB.prototype);