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
时,对myobject
中runMe
的引用都会改变。
var runMe = function(){
$('#'+myobject.id).die('someEventThatTriggersRightAway', runMe);
console.log("Hello "+myobject.name);
};
这是working example。
旁注:您是否知道不推荐使用jQuery
.live()
和.die()
方法?您应该改为使用.on()
(jQuery 1.7+)或.delegate()
。