this
- 作为普通函数
- 使用call apply bind(传入什么就返回什么)
- 作为对象方法被调用
- 在class方法中被调用(当前实例本身)
- 箭头函数(上一级作用域的定义)
this是在函数执行的时候确定,不是在函数定义的时候确定
function fn1(){
console.log(this)
}
fn1();//window
fn1.call({x:100})// {x:100}
const fn2 = fn1.bind({x:200})
fn2() //{x:200}
来看看其他例子
const zhangsan={
name:'tom',
sayHi(){
//this当前对象
console.log(this)
}
wait(){
setTimeout(function(){
//this === window
console.log(this)
})
}
}
const zhangsan={
name:'tom',
sayHi(){
//this当前对象
console.log(this)
}
waitAgain(){
setTimeout(()=>{
//this 当前对象,箭头函数取上级作用域的this,自己本身不会有this
console.log(this)
})
}
}
class People{
constructor(name){
this.name = name
this.age = 20
}
sayHi(){
console.log(this)
}
}
const zhangsan = new People;
zhangsan.sayHi() //zhangsan
James.__proto__.sayHi