微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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中都有效).

原文地址:https://www.jb51.cc/jquery/180407.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐