function myClass(myobject){
      var myclass = {};

      myclass.registerEvent = function(){
          $('#'+myobject.id).live('someEventThatTriggersRightAway', runMe);
      };

      runMe = function(){
            $('#'+myobject.id).die('someEventThatTriggersRightAway', runMe);
            console.log("Hello "+myobject.name);
      };

      return myclass;
}


var instance1 = new myClass({id:'button1',name:'MATO'});
var instance2 = new myClass({id:'button2',name:'YAMA'});


当我运行这段代码

instance1.registerEvent();


结果是

Hello YAMA


好像第一个实例已被第二个实例覆盖。如果只能在事件的回调中传递“ myobject”,我可以解决此问题,但是我不知道该怎么做。而且我不能杀死它,如果它有参数。我怎样才能做到这一点?

谢谢!

最佳答案

您已经错过了var中的runMe,因此runMe正在泄漏到全局执行上下文中。因此,每次调用myClass时,对myobjectrunMe的引用都会改变。

var runMe = function(){
    $('#'+myobject.id).die('someEventThatTriggersRightAway', runMe);
    console.log("Hello "+myobject.name);
};


这是working example



旁注:您是否知道不推荐使用jQuery .live().die()方法?您应该改为使用.on()(jQuery 1.7+)或.delegate()

09-12 20:41