zoukankan      html  css  js  c++  java
  • 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);

      }

    }

  • 相关阅读:
    js继承《转》
    千分位分割正则
    所有事件失效
    658. Find K Closest Elements
    278. First Bad Version
    153. Find Minimum in Rotated Sorted Array
    11. Container With Most Water
    205. Isomorphic Strings
    75. Sort Colors
    695. Max Area of Island
  • 原文地址:https://www.cnblogs.com/tellme/p/2411328.html
Copyright © 2011-2022 走看看