jQuery.bind()事件在简单的Javascript对象上

前端之家收集整理的这篇文章主要介绍了jQuery.bind()事件在简单的Javascript对象上前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
将jQuery事件绑定到简单的非DOM Javascript对象可以吗?
var myobject = {};
$(myobject).bind("foobar",function() { alert("daa"); });

$(myobject).trigger("foobar");

有什么影响?

垃圾收集(没有新的引用创建,防止对象GCeded)
>对象属性(分配给对象的新属性)?
>表现

我注意到的一些事情

>事件名称不得与对象上的函数名冲突,例如你不能有init和event的函数名为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");

http://jsfiddle.net/kEuAP/

然而,为了回答你的问题,除了没有记录的事情之外,我看不到任何即时的问题,而且可能会将功能从版本更改为版本(尽管它在所有当前可用的版本1.2.6中都有效).

猜你在找的jQuery相关文章