js参考---call和apply

js参考---call和apply

一、总结

一句话总结:

call和apply都是函数对象的方法,call和apply方法的作用就是修改函数执行时候的this,所以可以给方法指定对象,例如fun.call(obj,2,3);

1、call和apply方法的作用是什么?

call和apply方法可以调用函数(给函数指定对象的方式调用),call和apply都是函数对象的方法

2、call和apply方法的操作对象是谁?

都是函数,当对函数调用call()和apply()都会调用函数执行,只不过call和apply指定执行方法的对象,例如fun.call(obj,2,3);

3、js调用函数的方式?

函数名加圆括号,或者调用函数对象的call或apply方法

4、call方法和apply方法的区别?

apply是数组传实参,call是一个一个这样传实参

call()方法可以将实参在对象之后依次传递,例如:fun.call(obj,2,3);
apply()方法需要将实参封装到一个数组中统一传递,例如:fun.apply(obj,[2,3]);

5、this的指向情况(加上call和apply)?

this是谁调用它,它就指向谁,包括构造函数,call和apply相当于专门指定this

1.以函数形式调用时,this永远都是window
2.以方法的形式调用时,this是调用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.使用call和apply调用时,this是指定的那个对象

6、call和apply机制调用方法和 普通对象调用方法的区别?

一般对对象而言,都是对象调用方法,而call和apply方法就是反过来了,就是函数来指定调用它的对象,也就是指定函数里面的this对象,例如 fun.call(obj,2,3);

二、call和apply

博客对应课程的视频位置:

 1 <!DOCTYPE html>
 2 <html>
 3 
 4     <head>
 5         <meta charset="UTF-8">
 6         <title></title>
 7         <script type="text/javascript">
 8             function fun(a,b) {
 9                 console.log("a = "+a);
10                 console.log("b = "+b);
11                 //alert(this);
12             }
13             
14             var obj = {
15                 name: "obj",
16                 sayName:function(){
17                     alert(this.name);
18                 }
19             };
20 
21             /*
22              * call()和apply()
23              *     - 这两个方法都是函数对象的方法,需要通过函数对象来调用
24              *     - 当对函数调用call()和apply()都会调用函数执行
25              *     - 在调用call()和apply()可以将一个对象指定为第一个参数
26              *         此时这个对象将会成为函数执行时的this
27              *     - call()方法可以将实参在对象之后依次传递
28              *     - apply()方法需要将实参封装到一个数组中统一传递
29              * 
30              *     - this的情况:
31              *         1.以函数形式调用时,this永远都是window
32              *         2.以方法的形式调用时,this是调用方法的对象
33              *         3.以构造函数的形式调用时,this是新创建的那个对象
34              *         4.使用call和apply调用时,this是指定的那个对象
35              */
36             
37             //fun.call(obj,2,3);
38             fun.apply(obj,[2,3]);
39 
40             
41 
42             var obj2 = {
43                 name: "obj2"
44             };
45 
46             /*fun.apply();
47             fun.call();
48             fun();*/
49 
50             //fun.call(obj);
51             //fun.apply(obj);
52 
53             //fun();
54             
55             //obj.sayName.apply(obj2);
56         </script>
57     </head>
58 
59     <body>
60     </body>
61 
62 </html>
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/12434756.html