【发布时间】:2012-02-01 16:37:18
【问题描述】:
是否可以将 jQuery 事件绑定到普通的非 DOM Javascript 对象:
var myobject = {};
$(myobject).bind("foobar", function() { alert("daa"); });
$(myobject).trigger("foobar");
有什么影响
垃圾收集(没有创建新的引用阻止对象被 GC'ed)
对象属性(分配给对象的新属性)?
性能
我注意到的一些事情
- 事件名称不得与对象上的函数名称冲突,例如您不能拥有名为 init 的函数 init 和事件并正确触发它
【问题讨论】:
-
你为什么要这样做?
-
如果你想要一个事件系统,我建议创建你自己的,或者使用一个用于典型 JS 对象的现有系统。它们不难写,而且会更具体到你想做的事情。
-
一个原因是实现超级简单的事件发射器:gist.github.com/1032342
-
如果可以使用 jQuery 事件系统,为什么还要编写自己的事件系统?
-
效果很好,包括 jQuery 3.5,但要注意:如果普通对象有方法
foobar,它也会被触发。实际上最好使用 triggerHandler 而不是 trigger:$(myobject).triggerHandler("foobar");
标签: javascript jquery