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

 

posted @ 2020-11-16 21:21  Evengod  阅读(146)  评论(0编辑  收藏  举报