2025-05-24

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);

  }

}

 

摘自  午後陽光……..
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *