在js的语法规则中,如果一个对象内存在方法,则该方法this指向当前对象。
如下所示:
let obj = {
age: 10,
getAge: function () {
console.log(this.age)
}
}
obj.getAge();// 10
若方法中再次包含函数方法,则该嵌套函数指向全局。不能获取到本对象中的属性。
如下所示:
let obj = {
age: 10,
getAge: function () {
setTimeout(function(){ alert(this.age)}, 1000)
}
}
obj.getAge();// undefined
可以通过如下几种办法来解决此问题:
(1)定义变量,保存对象this
getAge: function () {
let self = this;
setTimeout(function(){ alert(self.age)}, 1000)
}
(2)通过bind/call/apply方法改变函数this指向
getAge: function () {
setTimeout(function(){ alert(this.age)}.bind(this), 1000)
}
(3)通过箭头函数的方式
由于箭头函数具有默认指向父级调用对象obj的特点,因此也可以解决本问题
getAge: function () {
setTimeout(() => { alert(this.age)}, 1000)
}