【发布时间】:2014-01-17 02:47:05
【问题描述】:
我创建了一个具有多种方法的对象。其中一些方法是异步的,因此我想使用事件来在方法完成时执行操作。为此,我尝试将 addEventListener 添加到对象中。
var iSubmit = {
addEventListener: document.addEventListener || document.attachEvent,
dispatchEvent: document.dispatchEvent,
fireEvent: document.fireEvent,
//the method below is added for completeness, but is not causing the problem.
test: function(memo) {
var name = "test";
var event;
if (document.createEvent) {
event = document.createEvent("HTMLEvents");
event.initEvent(name, true, true);
} else {
event = document.createEventObject();
event.eventType = name;
}
event.eventName = name;
event.memo = memo || { };
if (document.createEvent) {
try {
document.dispatchEvent(event);
} catch (ex) {
iAlert.debug(ex, 'iPushError');
}
} else {
document.fireEvent("on" + event.eventType, event);
}
}
}
iSubmit.addEventListener("test", function(e) { console.log(e); }, false);
//This call is added to have a complete test. The errors are already triggered with the line before this one.
iSubmit.test();
这将返回错误:Failed to add eventlisterens: TypeError: 'addEventListener' called on an object that does not implement interface EventTarget."
现在这段代码将在 phonegap 应用程序中使用,当我这样做时,它可以在 android/ios 上运行。但是,在测试期间,如果我能让它在至少一个浏览器中工作,那就太好了。
PS>我知道我可以启用冒泡,然后监听文档根目录,但我希望有一点 OOP,每个对象都可以独立工作。
【问题讨论】:
-
Nodejs 有这个功能。他们会做类似
var emitter = require('events').EventEmitter;的事情。但是我们可以像ourObject.prototype.__proto__ = EventTarget.prototype;那样做吗?在这里,调节 JS ??
标签: javascript object cordova addeventlistener