16_this.html 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <div class="box">hello</div>
  10. <script>
  11. // this 指向事件绑定的元素 谁调用当前函数 就指向谁
  12. // let box = document.querySelector(".box");
  13. // box.onclick = function(){
  14. // console.log(this);
  15. // }
  16. // let obj = {
  17. // name:"张三",
  18. // age:18,
  19. // sex:"男",
  20. // say(){
  21. // console.log(this.name);
  22. // }
  23. // }
  24. // // 调用obj的say方法 指向obj
  25. // obj.say();
  26. // 调用say方法 指向window 对象 函数前没有加任何调用者 指向window
  27. // function say(){
  28. // console.log(this);
  29. // }
  30. // say();
  31. // let obj = {
  32. // name:"张三",
  33. // age:18,
  34. // sex:"男",
  35. // say(){
  36. // console.log(this);
  37. // function foo(){
  38. // console.log(this);
  39. // }
  40. // foo();
  41. // }
  42. // }
  43. // obj.say();
  44. // window.setTimeout(function(){
  45. // console.log(this);
  46. // },1000)
  47. var name1 = "李四";
  48. let obj = {
  49. name1:"张三",
  50. age:18,
  51. sex:"男"
  52. }
  53. console.log(window.name1);
  54. function say(a,b){
  55. console.log(a,b,this.name1);
  56. }
  57. // 改变this指向 call( ) apply() bind()
  58. // call() 方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向
  59. // call() 第一个参数是this指向的对象,后面的参数是函数调用的参数
  60. // say.call(obj,1,2);
  61. // apply() 方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向
  62. // apply() 第一个参数是this指向的对象,后面的参数是函数调用的参数 以数组的形式传递
  63. // say.apply(obj,[3,4]);
  64. // bind() 可以实现改变this的方法
  65. // 使用后并不会立即执行函数 需要手动调用
  66. // bind的参数部分与call参数一致
  67. let foo = say.bind(obj,1,2);
  68. // 手动调用
  69. foo();
  70. </script>
  71. </body>
  72. </html>