13_this.html 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 id="box">hello world</div>
  10. <script>
  11. // 事件绑定中的 this 指向 事件源
  12. // let oBox = document.querySelector("#box");
  13. // oBox.onclick = function(){
  14. // console.log(this);
  15. // }
  16. // // 全局中的 this 指向 window
  17. // console.log(this);
  18. // 一般情况下this都是应用在函数内部的
  19. // this 谁调用的函数 this一般就是指向谁
  20. // 普通函数的this
  21. // function fn(){
  22. // console.log(this);
  23. // }
  24. // // fn();
  25. // window.fn();
  26. // 对象中的方法
  27. // let obj = {
  28. // name:"张三",
  29. // age:18,
  30. // sex:"男",
  31. // talk:function(){
  32. // console.log(this.name);
  33. // }
  34. // }
  35. // obj.talk();
  36. // 箭头函数中的this
  37. // 箭头函数中的this 指向的是 定义时的上下文 而不是调用时的上下文
  38. // var obj = {
  39. // name:"张三",
  40. // age:18,
  41. // sex:"男",
  42. // talk:()=>{
  43. // console.log(this);
  44. // }
  45. // }
  46. // obj.talk();
  47. // let obj = {
  48. // name:"张三",
  49. // age:18,
  50. // sex:"男",
  51. // talk:function(){
  52. // function fn(){
  53. // console.log(this)
  54. // }
  55. // fn();
  56. // }
  57. // }
  58. // obj.talk();
  59. // 修改this指向
  60. // call() apply() bind()
  61. // call
  62. // var obj = {
  63. // name:"张三",
  64. // age:18,
  65. // sex:"男"
  66. // }
  67. // var age = 20;
  68. // function fn(){
  69. // // this 指向的 window
  70. // console.log(this.age)
  71. // }
  72. // fn()
  73. // call 方法
  74. // call 可以改变当前函数默认this指向
  75. // call 第一个参数 是改变后的this指向 让this指向谁
  76. // call 从第二个参数开始是要传递的参数
  77. // var obj = {
  78. // name:"张三",
  79. // age:18,
  80. // sex:"男"
  81. // }
  82. // var age = 20;
  83. // function fn(a,b){
  84. // // this 指向的 window
  85. // console.log(this.age)
  86. // console.log(a+b);
  87. // }
  88. // fn.call(obj,1,2)
  89. // apply 方法
  90. // apply 方法和call方法基本相同
  91. // 唯一的区别就是 apply 方法只有两个参数
  92. // 第一个参数 是改变后的this指向 让this指向谁
  93. // 第二个参数 是一个数组 数组中的元素是要传递的参数
  94. // var obj = {
  95. // name:"张三",
  96. // age:18,
  97. // sex:"男"
  98. // }
  99. // var age = 20;
  100. // function fn(a,b){
  101. // // this 指向的 window
  102. // console.log(this.age)
  103. // console.log(a+b);
  104. // }
  105. // fn.apply(obj,[1,2])
  106. // bind 方法
  107. // bind 方法和call \ apply 不同地方
  108. // bind 方法不会调用函数 而是返回一个新的函数
  109. // 返回的心函数是已经绑定好this的函数
  110. // bind 参数部分跟call 方法参数部分是一样的
  111. // var obj = {
  112. // name:"张三",
  113. // age:18,
  114. // sex:"男"
  115. // }
  116. // var age = 20;
  117. // function fn(a,b){
  118. // // this 指向的 window
  119. // console.log(this.age)
  120. // console.log(a+b);
  121. // }
  122. // var fn2 = fn.bind(obj,1,2);
  123. // fn2();
  124. </script>
  125. </body>
  126. </html>