MDN链接:
https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget
创建和触发事件MDN链接:
https://developer.mozilla.org/zh-CN/docs/Web/Guide/Events/Creating_and_triggering_events
EventTarget接口实现代码:
// TEvent
var TEvent = function () {
this.listeners = [];
}
TEvent.prototype.listeners = null;
TEvent.prototype.add = function(type, callback) {
if (!(type in this.listeners)) {
this.listeners[type] = [];
}
this.listeners[type].push(callback);
}
TEvent.prototype.remove = function (type, callback) {
if (!(type in this.listeners)) {
return;
}
var stack = this.listeners[type];
for (var i = 0, l = stack.length; i < l; i++) {
if (stack[i] === callback) {
stack.splice(i, 1);
return this.remove(type, callback);
}
}
}
// 浏览器环境下的事件分发
TEvent.prototype.dispatch = function (event) {
if (!(type in this.listeners)) {
return;
}
var stack = this.listeners[event.type];
event.target = this;
for (var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, event);
}
}
// JSCore环境下的事件分发
TEvent.prototype.dispatch = function (type) {
if (!(type in this.listeners)) {
return;
}
var stack = this.listeners[type];
for (var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, type);
}
}