JS中的this可以簡單理解為:誰調(diào)用我奄喂,this就是誰海洼。
ES6箭頭函數(shù)的this略微不同:this指向離該箭頭函數(shù)最近的父級(jí)聲明式函數(shù),即:ES5:function func(){...} 或 ES6:func(){...}
坏逢。
異步函數(shù)中的聲明式函數(shù)想要提升 this的指向,可以對(duì)函數(shù)進(jìn)行this綁定是整。
做法是直接在函數(shù)的花括號(hào)后面添加bind(this)
。
1浮入、箭頭函數(shù)的this
下面例子中的函數(shù)bb
,setTimeout
箭頭函數(shù)里的this實(shí)際上是函數(shù)bb
的this事秀,而它是指向?qū)ο?code>a的野舶,因此不需要bind
就能直接調(diào)用aa
方法。
2平道、this綁定
下面例子中的函數(shù)cc
,我們在setTimeout
中為匿名函數(shù)添加了bind(this)
一屋,此時(shí)這個(gè)this
是函數(shù)cc
的this
,而這個(gè)this
實(shí)際上是指向?qū)ο?code>a的陆淀,因此就可以在匿名函數(shù)中調(diào)用aa
方法了考余。
/**
* 用 setTimeout模擬異步函數(shù)中的this的問題。
*/
const a = {
aa(){
console.log(111);
},
bb(){
setTimeout(() => {
this.aa();
}, 1000);
},
cc(){
/**
* 聲明式函數(shù)需要進(jìn)行this綁定楚堤,直接跟在函數(shù)的花括號(hào)后即可。
*/
setTimeout(function(){
this.aa();
}.bind(this), 1000);
}
}
// a.bb();
a.cc();