jquery1.4,事件绑定后会m会被覆盖,两个事件指向最后的对象,情形如下:
function pop1(){
var obj = {
m: "2",
fn: function() {
$(window).bind("resize",$.proxy(this.pop, this));
}
};
$.extend(obj,a);
obj.fn();
}
function pop2(){
var obj = {
m: "3",
fn: function() {
$(window).bind("resize",$.proxy(this.pop, this));
}
};
$.extend(obj,a);
obj.fn();
}
var a={pop:function(){alert(this.m)}}
pop1();//3
pop2();//3
通过$.proxy(this.pop, this)这种方式改变作用域后绑定在window上,obj.m会被覆盖,原因不明.换成1.4.2 后可以正常,$.extend,$.proxy两个方法在这两个版本中都没有改变.;解决办法:
1、不使用$.extend,直接把方法写到obj里面,就可以正常:如下
function pop1(){
var obj = {
m: "2",
fn: function() {
$(window).bind("resize",$.proxy(this.pop, this));
},
pop:function(){alert(this.m)}
};
//$.extend(obj,a);
obj.fn();
}
function pop2(){
var obj = {
m: "3",
fn: function() {
$(window).bind("resize",$.proxy(this.pop, this));
},
pop:function(){alert(this.m)}
};
//$.extend(obj,a);
obj.fn();
}
var a={pop:function(){alert(this.m)}}
pop1();
pop2();
2、不要用$.proxy(this.pop, this),直接用function(){obj.pop()}也可以
又或者自定proxy,
function proxy(fn,content){
reutnr function(){
fn.apply(content,arguments);
}
}