jQuery1.4bug1

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

  }

}

原文地址:https://www.cnblogs.com/tellme/p/2411328.html