zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/sener/p/13989816.html
Copyright © 2011-2022 走看看