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>