事件监听就是一个访问者模式,一个典型的访问者模式可以这么实现:
- 首先定义一个类,初始化它的访问者列表;
- 对外提供一个添加访问者的接口;
- 对外提供一个删除访问者的接口;
- 对外提供一个传递信息的接口。
function Input (inputDOM) {
this.visitiors = {
"click":[],
"change":[],
"special":[] // 自定义事件
}
this.inputDOM = inputDOM;
}
Input.prototype.on = function (eventType, callback) {
if (typeof this.visitiors[eventType] !== "undefined") {
this.visitiors[eventType].push(callback)
}
}
Input.prototype.off = function (eventType, callback) {
var visitors = this.visitiors[eventType];
if (typeof this.visitiors[eventType] !== "undefined") {
var index = visitiors.indexOf(callback);
if (index >= 0) {
visitiors.splice(index, 1)
}
}
}
Input.prototype.trigger = function (eventType, callback) {
var visitors = this.visitiors[eventType];
var eventFormat = processEevent(event);
if (typeof this.visitiors[eventType] !== "undefined") {
for (var i = 0; i < visitiors.length; i++) {
visitiors[i](eventFormat);
}
}
}