js的this指向一直是一个难点,看完这篇文章就懂了。
在标准函数中和箭头函数中,this指向不同
var foo = 'bar'
let obj = {
foo: 'obj bar'
}
function func () {
console.log(this.foo) //此时的this指向windows
}
func()
obj.func = func
obj.func() //此时的调用输出obj bar, this指向调用的对象obj
//箭头函数
let func = () => {
this.foo
}
obj.func = func
obj.func() //此时的调用输出 bar,this指向window
闭包中的this
window.identity = 'The Window';
let object = {
identity: 'My object',
getIdentityFunc() {
return function () {
return this.identity //this指向了window,拿不到对象内的变量
}
}
}
console.log(object.getIdentityFunc()());
window.identity = 'The Window';
let object = {
identity: 'My Object',
getIdentityFunc() {
let that = this; //使用变量保存this
return function() {
return that.identity; //此时的this指向对象,可以调用对象的属性和方法
};
}
};
console.log(object.getIdentityFunc()());
如果看完不明白可以留言,我会回复的。