• JS call()、apply()、bind()


     1 /**
     2     * JS call()、apply()、bind()
     3     * */
     4    //EX1
     5    var name = "小王",age = 17;
     6    var obj = {
     7       name:"小张",
     8       objAge:this.age,
     9       myFun:function()
    10       {
    11          console.log(this.name + "年龄" + this.age);
    12       }
    13    };
    14    obj.objAge;//17
    15    //this指向:window
    16    obj.myFun();//小张年龄undefined
    17    //this指向:obj
    18 
    19 
    20    //EX2
    21    var fav = "LBJ";
    22    function shows()
    23    {
    24       console.log(this.fav);
    25    }
    26    shows();//LBJ
    27    //this指向:window
    28 
    29    
    30 
    31    /**
    32     * call()、apply()、bind() 都是用来重新定义this的指向
    33     * */
    34    var name = "小王",age = 17;
    35    var obj = {
    36       name:"小张",
    37       objAge:this.age,
    38       myFun:function()
    39       {
    40          console.log(this.name + "年龄" + this.age);
    41       }
    42    };
    43    var db = {
    44       name:"LBJ",
    45       age:36
    46    };
    47    obj.myFun.call(db);//LBJ年龄36
    48    obj.myFun.apply(db);//LBJ年龄36
    49    obj.myFun.bind(db);//ƒ (){console.log(this.name + "年龄" + this.age);}
    50    //bind返回的是一个函数,必须调用才会执行
    51    obj.myFun.bind(db)();//LBJ年龄36
    52 
    53 
    54 
    55    /**
    56     * call()、apply()、bind() 传参情况
    57     * */
    58    var name = "小王",age = 17;
    59    var obj = {
    60       name:"小张",
    61       objAge:this.age,
    62       myFun:function(fm,t)
    63       {
    64          console.log(this.name + " 年龄 " + this.age , " 来自 " + fm + " 去往 " + t);
    65       }
    66    };
    67    var db = {
    68       name:"LBJ",
    69       age:36
    70    };
    71    obj.myFun.call(db,"北京","上海");//LBJ 年龄 36  来自 北京 去往 上海
    72    obj.myFun.apply(db,["北京","上海"]);//LBJ 年龄 36  来自 北京 去往 上海
    73    obj.myFun.bind(db,"北京","上海")();//LBJ 年龄 36  来自 北京 去往 上海
    74    obj.myFun.bind(db,["北京","上海"])();/** LBJ 年龄 36  来自 北京,上海 去往 undefined */
    75 
    76    /**
    77     * call、apply、bind 这三个参数的第一个参数都是this的指向对象
    78     * 第二个参数:call 的参数是字符串,用逗号","分隔。
    79     *           apply 的参数都必须放在一个数组里传进去
    80     *           bind 除了返回的是函数之外,传参和call一样
    81     * 当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!
    82     * 
    83     * 如果call和apply的第一个参数写的是null,那么this指向的是window对象
    84     * */
    85 
    86    //原文: https://www.cnblogs.com/Shd-Study/p/6560808.html
  • 相关阅读:
    JArray
    签名和验签
    private、protected、public和internal的区别
    DataTime.Now.Ticks
    NameValuePair 简单名称值对节点类型
    01安卓目录结构
    SDK目录结构
    java wait和notify及 synchronized sleep 总结
    安卓常用的第三方框架
    OkHttp使用教程
  • 原文地址:https://www.cnblogs.com/sener/p/13989816.html
Copyright © 2020-2023  润新知