CreateJS eventlistener无法正常工作

时间:2017-03-26 03:28:10

标签: 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 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注册该事件。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

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

  1. 在EventDispatcher中混合
  2. 为{some {1}添加侦听器以获取“someEvent”
  3. 然后(仅)ClassB实例调度“someEvent”。
  4. 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);