javascript - 普通 Javascript 对象上的 jQuery.bind() 事件

标签 javascript jquery

是否可以将 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"); 

http://jsfiddle.net/kEuAP/


但是,为了回答您的问题,除了没有记录在案并且可能会在不同版本之间更改功能(尽管它适用于所有当前可用的版本 1.2.6 之外,我没有看到您正在做的事情有任何直接问题+).

关于javascript - 普通 Javascript 对象上的 jQuery.bind() 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099555/

相关文章:

javascript - 为什么 if(number <=10) 不起作用?

javascript - 用户单击后 Angular 更改复选框的状态

javascript - 我想防止另一个元素位置在 "display: block;"宽度鼠标悬停时减少,

javascript - jquery height() 方法返回行高

jquery - 在一行中应用更多 CSS 属性

jQuery fadeOut 和 SlideUp,然后 fadeIn 和 SlideDown

javascript - 一元加号和减号运算符的重要用途是什么?

javascript - AJAX 加载后触发 Jquery slider

javascript - 根据索引名称动态解析JSON数据

javascript - 删除前确认