是否可以将 jQuery 事件绑定(bind)到普通的非 DOM Javascript 对象:
var myobject = {};
$(myobject).bind("foobar", function() { alert("daa"); });
$(myobject).trigger("foobar");
有什么影响
垃圾收集(没有创建新的引用以防止对象被 GC 处理)
对象属性(分配给对象的新属性)?
性能
我注意到的一些事情
- 事件名称不得与对象上的函数名称冲突,例如您不能拥有名为 init 的函数 init 和事件并正确触发它
最佳答案
我不使用 jquery 事件系统,而是使用 jQuery.Callbacks 来实现一个模仿它的系统。方法。
var myClass = function(){
this._callbacks = {};
};
myClass.prototype = {
addEvent: function(evname,callback) {
if (!this._callbacks[evname]) {
this._callbacks[evname] = $.Callbacks();
}
this._callbacks[evname].add(callback);
},
removeEvent: function(evname) {
if (!this._callbacks[evname]) {
return;
}
this._callbacks[evname].remove();
//Might need this too:
//this._callbacks[evname] = null;
},
triggerEvent: function(evname) {
if (this._callbacks[evname]) {
this._callbacks[evname].fire();
}
}
};
var foo = new myClass();
foo.addEvent("foo",function(){
console.log('foo');
});
foo.triggerEvent("foo");
foo.removeEvent("foo");
// event was removed, the below line won't do anything.
foo.triggerEvent("foo");
但是,为了回答您的问题,除了没有记录在案并且可能会在不同版本之间更改功能(尽管它适用于所有当前可用的版本 1.2.6 之外,我没有看到您正在做的事情有任何直接问题+).
关于javascript - 普通 Javascript 对象上的 jQuery.bind() 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099555/