let obj = {
fn: function () {
console.log(this)
let a = function () {
console.log(this)
}
let b = ()=>{
console.log(this)
}
a()
b()
}
}
obj.fn()
let newFn = obj.fn
newFn()
首先明确一点:this指向被调用者 ,比如a.b() ,a调用b,b方法里的this就指向a
执行obj.fn()时,obj调用fn方法,所以fn方法里的this指向obj 由此得出:
第一个this指向obj
第二个this(a方法里的this)a()实际是window.a() 是window在调用 所以指向window
第三个this(箭头函数里的this)由于箭头函数内没有this,即不需要调用者调用可以自执行,所以它内部的this会向父级查找,所以是obj
执行 let newFn = obj.fn; newFn便是一个方法,指向与obj.fn同地址的方法体
执行newFn() 实际是window.newFn() 所以newFn内的this指向window
所以里面的三个this都指向window