this

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