12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <script>
- /*
- call()和apply()
- -这两个方法都是函数对象的方法,需要通过函数对象来调用
- -当对函数调用call()和apply()都会调用函数执行
- -在调用call和apply可以将一个对象指定为第一个参数
- 此时这个对象将会成为函数执行时的this
- -call()方法可以将实参在对象之后依次传递
- -apply()方法需要将实参封装到一个数组中统一传递
- this的情况:
- 1.以函数形式调用时,this永远都是window
- 2.以方法的形式调用时,this是调用方法的对象
- 3.以构造函数的形式调用时,this是新创建的那个对象
- 4.使用call和apply调用时,this是指定的那个对象
- */
- // function fun(){
- // console.log("我是fun函数");
- // }
- // fun();
- // fun.call();
- // fun.apply();
- // function fun(){
- // console.log(this.name);
- // }
- // var obj = {
- // name:"孙悟空",
- // sayName:function(){
- // console.log(this.name);
- // }
- // };
- // var obj2 = {name:"二郎神"};
- // fun.call(obj);//输出结果为孙悟空
- // fun.apply(obj2);//输出结果为二郎神
- // fun();
- // obj.sayName().apply(obj2);//程序报错
- function fun(a,b){
- console.log("a="+a);
- console.log("b="+b);
- }
- var obj = {};
- fun.call(obj,2,3);
- // fun.apply(obj,2,3);//报错
- fun.apply(obj,[2,3]);
- </script>
- </head>
- <body>
-
- </body>
- </html>
|