如何通过 EventTarget 原型将数据传递给自定义事件?

How to pass data to a custom event via EventTarget prototype?

我正在关注 blog post 使用 EventTarget 原型创建自定义事件。在我的例子中,这个 EventTarget 对象需要修改为 return dataonDataEvent 监听器:

o.onDataEvent("foo", function(data){
    var dataRetrieved = data.message; //retrieve data object passed to fire function
    console.log(dataRetrieved); //undefined
    alert("Foo just happened.");
});

所以我在 JSFiddle 中基于 this blog post 做了一个要点,我在其中覆盖了调度事件的 EventTarget.fire 函数,以接受 data[ 的第二个参数=39=].

并且还修改了 onDataEvent 签名以包含数据参数。这里的想法是,除了调用 event("foo") 之外,我还会 return 一些数据到事件中。

我知道事件是通过 listeners[i].call(this, event); 调用的,但我不清楚如何在 .call 中传回数据。

问题:

如何通过 EventTarget 原型将数据传递给自定义事件?

这是该代码的要点:https://jsfiddle.net/hLj7yxw9/8/

在调试过程中,我验证了事件是使用此模式调用的,正如您在上面看到的那样 fiddle。

data 作为 listeners[i].call(this, event, data)

传递

然后在你的听众中做:

o.onDataEvent("foo", function(event, data){
    console.log(data);
});

https://jsfiddle.net/hLj7yxw9/9/