this默认情况下 只是只当前环境下
只有函数一对象属性的形式出现时该方法的this指向的是当前的对象
如果不以对象属性出现的函数this指向window,也就是说普通函数指向的window
修改this指向
// 1. 可以使用把this赋值给self
let self = this
// 2. 也可以利用map的第二个参数把this传递进去
let Lesson = {
site: 'houduan',
list: ['22', 'qq', '22'],
show: function() {
return this.list.map(function(valye) {
console.log(this.site)
// 输出 houduan
}, this)
}
}
//3 使用箭头函数可以解决函数不以类属性出现时this指向window的问题
也就是说 在箭头函数中的this指向的就是上下文也就是父级的this,普通函数指向的就是window
let Lesson = {
site: 'houduan',
list: ['22', 'qq', '22'],
show: function() {
return this.list.map(valye => {
console.log(this.site)
// 输出 houduan
})
}
}
// 4. call[多个参数]/apply[数组]区别就是传递的参数不同,并且会立刻执行
let lisi = {
name: '李四'
}
let wangwu = {
name: '王武'
}
function User(a, b) {
console.log(a + b + this.name)
}
User.call(lisi, 'a', 'b') // 输出 ab李四
User.apply(wangwu,['a', 'b']) // 输出 ab王武
// 5.bind 不会立即执行。只会得到新的函数。