01.函数的方法.html 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script>
  9. /*
  10. call()和apply()
  11. -这两个方法都是函数对象的方法,需要通过函数对象来调用
  12. -当对函数调用call()和apply()都会调用函数执行
  13. -在调用call和apply可以将一个对象指定为第一个参数
  14. 此时这个对象将会成为函数执行时的this
  15. -call()方法可以将实参在对象之后依次传递
  16. -apply()方法需要将实参封装到一个数组中统一传递
  17. this的情况:
  18. 1.以函数形式调用时,this永远都是window
  19. 2.以方法的形式调用时,this是调用方法的对象
  20. 3.以构造函数的形式调用时,this是新创建的那个对象
  21. 4.使用call和apply调用时,this是指定的那个对象
  22. */
  23. // function fun(){
  24. // console.log("我是fun函数");
  25. // }
  26. // fun();
  27. // fun.call();
  28. // fun.apply();
  29. // function fun(){
  30. // console.log(this.name);
  31. // }
  32. // var obj = {
  33. // name:"孙悟空",
  34. // sayName:function(){
  35. // console.log(this.name);
  36. // }
  37. // };
  38. // var obj2 = {name:"二郎神"};
  39. // fun.call(obj);//输出结果为孙悟空
  40. // fun.apply(obj2);//输出结果为二郎神
  41. // fun();
  42. // obj.sayName().apply(obj2);//程序报错
  43. function fun(a,b){
  44. console.log("a="+a);
  45. console.log("b="+b);
  46. }
  47. var obj = {};
  48. fun.call(obj,2,3);
  49. // fun.apply(obj,2,3);//报错
  50. fun.apply(obj,[2,3]);
  51. </script>
  52. </head>
  53. <body>
  54. </body>
  55. </html>