这个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

浙公网安备 33010602011771号