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);
}
}
摘自 午後陽光……..