gpt4 book ai didi

javascript - 原型(prototype)自定义事件不在 DOM 元素上

转载 作者:行者123 更新时间:2023-12-01 16:16:56 24 4
gpt4 key购买 nike

this相同问题,但特定于原型(prototype)库:

我有一个浏览器类,我想为这个类触发和观察自定义事件。 Prototype 的自定义事件系统只允许我在 DOM 元素上绑定(bind)和触发事件。这是我关于替代方案的第一个想法:

function Browser() {
this.event = new Element('span');
}
Browser.prototype.render = function() {
this.event.fire('browser:render');
}

var browser = new Browser();
browser.event.observe('browser:render', function() { ... });

有更好的方法吗?

最佳答案

部分感谢 Frits van Campen 的建议,我自己制作了满足我需求的 sample ,比 Frits 的 sample 更复杂一些。

function EventManager(target) {
var target = target || window,
events = {};
this.observe = function(eventName, cb) {
if (events[eventName]) events[eventName].push(cb);
else events[eventName] = new Array(cb);
return target;
};
this.stopObserving = function(eventName, cb) {
if (events[eventName]) {
var i = events[eventName].indexOf(cb);
if (i > -1) events[eventName].splice(i, 1);
else return false;
return true;
}
else return false;
};
this.fire = function(eventName) {
if (!events[eventName]) return false;
for (var i = 0; i < events[eventName].length; i++) {
events[eventName][i].apply(target, Array.prototype.slice.call(arguments, 1));
}
};
}

然后我可以这样做:

Function Browser() {
this.event = new EventManager(this);
}
Browser.prototype.render = function() {
this.event.fire("render");
}

browser = new Browser();
browser.event.observe("render", function() { alert("Rendered"); });

关于javascript - 原型(prototype)自定义事件不在 DOM 元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com