下面这段代码,如果按照纯面向对象习惯的理解,当点击test按钮时,应该会alert一个“pp11”,和一个“pp22”,然而,实际情况时,会连续alert两个“pp22”~~
$(document).ready(function(){ var t1 = new TST('pp11'); var t2 = new TST('pp22'); }); //类 function TST(pars){ this.p1 = pars; this_ = this; $('button.test').click(function(){ alert(this_.p1); }); } |
出现这种情况的原因,我想应该是出在this的中间变量“this_”上:创建t1,t2对象时,test按钮被绑定了两次click事件,传入的参数都是this_,但创建t2时的this_覆盖了t1的this_,所以,再点击按钮时,实际传入的是两个t2
var this_ = this; |
上面的一个小小的改动,证实了我的猜测:this_前面加了var以后,this_便不会相互覆盖,程序正常了!