this

2020-09-11  本文已影响0人  酒暖花深Q

this在各个场景中的取值是在执行的时候确定的,而不是在定义的时候
callbind 都是改变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: ƒ}
上一篇 下一篇

猜你喜欢

热点阅读