this默认情况下 只是只当前环境下
    只有函数一对象属性的形式出现时该方法的this指向的是当前的对象
    如果不以对象属性出现的函数this指向window,也就是说普通函数指向的window
    修改this指向

    1. // 1. 可以使用把this赋值给self
    2. let self = this
    3. // 2. 也可以利用map的第二个参数把this传递进去
    4. let Lesson = {
    5. site: 'houduan',
    6. list: ['22', 'qq', '22'],
    7. show: function() {
    8. return this.list.map(function(valye) {
    9. console.log(this.site)
    10. // 输出 houduan
    11. }, this)
    12. }
    13. }
    14. //3 使用箭头函数可以解决函数不以类属性出现时this指向window的问题
    15. 也就是说 在箭头函数中的this指向的就是上下文也就是父级的this,普通函数指向的就是window
    16. let Lesson = {
    17. site: 'houduan',
    18. list: ['22', 'qq', '22'],
    19. show: function() {
    20. return this.list.map(valye => {
    21. console.log(this.site)
    22. // 输出 houduan
    23. })
    24. }
    25. }
    26. // 4. call[多个参数]/apply[数组]区别就是传递的参数不同,并且会立刻执行
    27. let lisi = {
    28. name: '李四'
    29. }
    30. let wangwu = {
    31. name: '王武'
    32. }
    33. function User(a, b) {
    34. console.log(a + b + this.name)
    35. }
    36. User.call(lisi, 'a', 'b') // 输出 ab李四
    37. User.apply(wangwu,['a', 'b']) // 输出 ab王武
    38. // 5.bind 不会立即执行。只会得到新的函数。