这个this到底是谁?

let obj = {
    a() {
        console.log(this)
    },
    name: 'jack',
    showName: this.name
}
obj.a()
console.log(obj.showName)
 
let a = obj.a;
a();

答案是:

obj对象
空值 
window对象

why?

obj.a()执行输出obj对象,以及最后a()执行返回window对象应该都能想到,为什么obj.showName是一个空值呢?

经测试,在代码编译阶段,obj对象里的this指向都是window 

编译期
let obj = {
    a() {
        console.log(this)    // 此处this指向window
    },
    name: 'jack',
    showName: this.name      // 此处this也指向window
}
obj.a()
console.log(obj.showName)
 
let a = obj.a;
a();

所以,showName是被window.name赋值的,而window.name没有定义,故显示空值 。

而当obj.a()这个普通函数(非箭头含数)真正执行时,this又会指向调用它的对象,即obj

posted @ 2020-08-25 11:01  marvinLiu  阅读(107)  评论(0)    收藏  举报