Javascript中this的 5 种应用场景

作者: loushumei | 来源:发表于2020-04-27 19:48 被阅读0次
    1、作为普通函数
    function fn1() {
        console.log(this)
    }
    fn1() //window 
    

    在全局执行,this指向全局

    2、使用call apply bind
    fn1.call({
        x: 1
    }) //{x:1}
    const fn2 = fn1.bind({
        x: 2
    })
    fn2() //{x: 2}
    
    3、作为对象方法被调用
    const zhangsan={
        name:'zhangsan',
        sayHi(){
            // this 即为当前对象
            console.log(this)
        },
        wait(){
            setTimeout(function() {
                // this == window
                console.log(this)
            }, 1);
        }
    }
    zhangsan.sayHi() //{name:"zhangsan",sayHi:f,wait:f} =>指向对象防范
    zhangsan.wait()// window
    

    sayHi()作为对象方法被执行,this指向当前对象。
    wait()执行时,打印的this是在 wait()内部的函数setTimeout中,而内部函数setTimeout指向了window,所以当前this指向Windows。

    4、箭头函数 =>
    const zhangsan = {
        name: 'zhangsan',
        sayHi() {
            // this 即为当前对象
            console.log(this)
        },
        waitAgain() {
            setTimeout(()=> {
                // this 即为当前对象
                console.log(this)
            }, 1);
        }
    }
    zhangsan.sayHi() //{name:"zhangsan",sayHi:f,wait:f} =>指向当前对象
    zhangsan.waitAgain() //{name:"zhangsan",sayHi:f,wait:f} =>指向当前对象
    

    箭头函数的this取上级作用域中的this
    所以waitAgain()中的this指向了当前对象

    5、在class中被调用
    class People{
        constructor(name){
            this.name=name
            this.age=20
        }
        sayHi(){
            console.log(this)
        }
    }
    const xialuo=new People('夏洛')
    xialuo.sayHi() //People {name: "夏洛", age: 20} this指向xiaola这个实例
    

    this的取什么值,是在函数执行的时候确认的,不是函数定义的时候确认的!!!

    相关文章

      网友评论

        本文标题:Javascript中this的 5 种应用场景

        本文链接:https://www.haomeiwen.com/subject/elguwhtx.html