函数方法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 alert(this.name); 13 14 } 15 16 var obj = { 17 name: "obj", 18 sayName:function(){ 19 alert(this.name); 20 } 21 }; 22 23 /* 24 * call()和apply() 25 * - 这两个方法都是函数对象的方法,需要通过函数对象来调用 26 * - 当对函数调用call()和apply()都会调用函数执行 27 * - 在调用call()和apply()可以将一个对象指定为第一个参数 28 * 此时这个对象将会成为函数执行时的this 29 * - call()方法可以将实参在对象之后依次传递 30 * - apply()方法需要将实参封装到一个数组中统一传递 31 * 32 * - this的情况: 33 * 1.以函数形式调用时,this永远都是window 34 * 2.以方法的形式调用时,this是调用方法的对象 35 * 3.以构造函数的形式调用时,this是新创建的那个对象 36 * 4.使用call和apply调用时,this是指定的那个对象 37 */ 38 39 //fun.call(obj,2,3); 40 fun.apply(obj,[2,3]); 41 42 43 44 var obj2 = { 45 name: "obj2" 46 }; 47 48 /*fun.apply(); 49 fun.call(); 50 fun();*/ //this 就是window 51 52 //fun.call(obj); //this 就是obj 53 //fun.apply(obj); //this 就是obj 54 55 //fun(); 56 57 //obj.sayName.apply(obj2); 58 </script> 59 </head> 60 61 <body> 62 </body> 63 64 </html>
1.
- this的情况:
* 1.以函数形式调用时,this永远都是window
* 2.以方法的形式调用时,this是调用方法的对象
* 3.以构造函数的形式调用时,this是新创建的那个对象
* 4.使用call和apply调用时,this是指定的那个对象