如何将getEventListener添加到javascript中的非dom元素?

use*_*291 7 javascript dom-events

在Java,C#,Actionscript等中.事件是针对类的,而在Javascript中似乎仅限于dom.我在这里阅读了一个用jquery做的示例 http://www.west-wind.com/weblog/posts/2010/May/27/NonDom-Element-Event-Binding-with-jQuery

但如果我不需要jquery,如果我想了解机制你会怎么做呢?

dtu*_*ury 5

最简单的机制是这样的:

function PubSub() {
    this.subs = {};
    this.subscribe = function(channel, sub) {
        this.subs[channel] = this.subs[channel] || []; //create array for channel
        this.subs[channel].push(sub);
    };
    this.publish = function(channel) {
        var args = [].slice.call(arguments, 1); //pop off channel argument
        this.subs[channel].forEach(function(sub) {
            sub.apply(void 0, args); //call each method listening on the channel
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

演示在这里:http : //jsfiddle.net/3PNtR/

-- 编辑(约 5 年后)-

相同的简单机制,更新的语法

class PubSub {
    constructor () {
        this.subs = {}
    }
    subscribe (channel, sub) {
        this.subs[channel] = this.subs[channel] || []
        this.subs[channel].push(sub)
    }
    publish (channel, ...args) {
        ;(this.subs[channel] || []).forEach(sub => sub(...args))
    }
}
Run Code Online (Sandbox Code Playgroud)