this
2020-09-11 本文已影响0人
酒暖花深Q
this
在各个场景中的取值是在执行的时候确定的,而不是在定义的时候
call
和bind
都是改变this
的指向 但是call
直接调用就执行 。bind
会返回给新的函数执行
function fn(){
console.log(this)
}
fn() //window
fn.call({x:100}) //{x: 100}
const fn1 = fn.bind({x:200})
fn1() //{x: 200}
const zhangsan = {
name:'张三',
saiHi(){
console.log(this)
},
wait(){
setTimeout(function(){
console.log(this)
})
}
}
zhangsan.saiHi() //当前对象this === {name: "张三", saiHi: ƒ, wait: ƒ}
zhangsan.wait() //this === Window
原因是setTimeout()
是重新定义的一个函数 ,它是作为一个普通函数被执行而不是 zhangsan
的方法被执行
箭头函数的this
指向当前的对象它是取得上级作用域的值
const lisi = {
name:'李四',
saiHi(){
console.log(this)
},
wait(){
setTimeout(() =>{
console.log(this)
})
}
}
lisi.saiHi() //当前对象this === {name: "李四", saiHi: ƒ, wait: ƒ}
lisi.wait() //this === {name: "李四", saiHi: ƒ, wait: ƒ}