The addEventListener
函数是一种方法Element
班级。一种方法是使CustomObject
继承自Element
像这样:
CustomObject.prototype = Element.prototype;
问题是Element
类在不同的浏览器中可能有不同的实现。因此,例如触发事件可能并不容易(请参阅这个帖子 https://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript).
所以我建议你自己做这件事。这并不难,尝试这样的事情:
var CustomObject = function () {
var _this = this;
_this.events = {};
_this.addEventListener = function(name, handler) {
if (_this.events.hasOwnProperty(name))
_this.events[name].push(handler);
else
_this.events[name] = [handler];
};
_this.removeEventListener = function(name, handler) {
/* This is a bit tricky, because how would you identify functions?
This simple solution should work if you pass THE SAME handler. */
if (!_this.events.hasOwnProperty(name))
return;
var index = _this.events[name].indexOf(handler);
if (index != -1)
_this.events[name].splice(index, 1);
};
_this.fireEvent = function(name, args) {
if (!_this.events.hasOwnProperty(name))
return;
if (!args || !args.length)
args = [];
var evs = _this.events[name], l = evs.length;
for (var i = 0; i < l; i++) {
evs[i].apply(null, args);
}
};
}
现在使用它就像这样简单:
var co = new CustomObject();
co.addEventListener('textChange', function(name) {
console.log(name);
});
co.fireEvent('textChange', ['test']);
这是一个基本的解决方案。你可能想改变它,但我认为你应该掌握这个想法。