Events CreateJS eventlistener工作不正常

Events CreateJS eventlistener工作不正常,events,createjs,easeljs,dispatch,Events,Createjs,Easeljs,Dispatch,我有以下代码: class classA { constructor() { createjs.EventDispatcher.initialize(classA.prototype); this.addEventListener("someEvent", function(evt) { console.log("classA has detected something has happened!"); });

我有以下代码:

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注册该事件


这是为什么?

之所以会发生这种情况,是因为只有“ClassB”实例正在侦听“ClassB”实例调度的事件。创建类时,您将:

  • 在EventDispatcher中混合
  • 为“someEvent”将侦听器添加到该
  • 然后(仅)ClassB实例正在调度“someEvent”
  • ClassA实例不会捕获ClassB实例调度的事件,因为每个类只侦听自身的事件

    如果您想捕获ClassB中的事件,您必须对其进行设置

    var a = new ClassA();
    var b = new ClassB();
    b.addEventListener("someEvent", a.someFunction);
    
    还要注意,您正在将EventDispatcher与构造函数中的
    原型混用。如果希望它出现在原型中,请将其添加到构造函数之外——否则每次都会发生。如果只想在一个实例上使用它,那么将其放入构造函数中,但只需传递
    this
    ,而不是
    Class.prototype

    class ClassB {
        // stuff
    }
    createjs.EventDispatcher.initialize(ClassB.prototype);
    
    或者更好,只需扩展EventDispatcher

    Class B extends createjs.EventDispatcher {
        // stuff
    }