请各位同仁指点迷津!
自己实现一个也没有多难吧……
function EventDispatcher() {
this.listeners = {};
}
EventDispatcher.prototype = {
on: function(type, listener) {
if (!this.listeners[type]) {
this.listeners[type] = [];
}
this.listeners[type].push(listener);
},
emit: function(type) {
var listeners = this.listeners[type];
var args = Array.prototype.slice.call(arguments);
args.shift();
if (typeof window.console !== "undefined") {
window.console.info("on\t" + type + "\t" + args.join(" , "));
}
if (listeners) {
for (var i = 0, len = listeners.length; i < len; i++) {
listeners[i].apply(this, args);
}
}
},
off: function(type) {
delete this.listeners[type];
}
};
然后browserify里你可以直接var EventDispatcher = require("events");
,它能提供一个功能差不多的用于前端编译。源码见此。
jQuery 的 on、off、trigger 就是你要的
也有一些已经实现好的 EventEmitter
如果你用了 webpack ,还可以直接使用 nodejs 的 event
自己实现
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
你是问事件传播机制,还是
EventEmitter
这个工具本身?如果是问工具,那还真有一个(但不是
jquery
提供的),看EventEmitter如果是问事件传播机制,那这也算啊: