關(guān)于 this,很多小伙伴可能都會(huì)很痛苦,或許還會(huì)遇到這樣那樣的問題设塔。
那么碧查,如何快速的理解和掌握 this 的運(yùn)用呢庞呕?
等你看完我這篇文章,相信你一定會(huì)有一種豁然開朗的感覺繁仁。
對(duì)于 this,你只需要記住這樣一句話:
this 初始的時(shí)候并不具有指向性,
只有「當(dāng)它所在的函數(shù)被調(diào)用的時(shí)候采够,this 會(huì)指向調(diào)用方。」
看完我下面的例子冰垄,你一定會(huì)瞬間秒懂~
var d = {
a: function (n) {
console.log(this.c)
},
c: 'd.c'
}
var c = 'Window.c';
d.a();
你還記得我剛才說的那句話嗎蹬癌?
this 在一開始定義的的時(shí)候并不具有指向性,
只有「當(dāng)它所在的函數(shù)被調(diào)用的時(shí)候虹茶,this 會(huì)指向調(diào)用方逝薪。」
在這段代碼中,this 所在的函數(shù)是 a蝴罪,在最后一行董济,通過d.a()
調(diào)用,這時(shí)洲炊,this 會(huì)指向調(diào)用 a 函數(shù)的人感局,也就是 d,所以,console.log(this.c)
這句話就會(huì)變成console.log(d.c)
暂衡,所以最后控制臺(tái)打印出來的結(jié)果就是d.c
怎么樣询微?是不是很簡(jiǎn)單呢?我們?cè)賮砜聪旅孢@一段代碼狂巢。
var d = {
a: function (n) {
n()
},
c: 'd.c'
}
var c = 'Window.c';
d.a(function () {
console.log(this.c)
});
我們用同樣的方式來分析撑毛,this
所在的函數(shù)為function () { console.log(this.c) }
,這個(gè)函數(shù)以參數(shù)的形式傳入到 a 中,并通過代碼n()
實(shí)現(xiàn)該函數(shù)的調(diào)用藻雌,那么問題來了雌续,n 本身就是這個(gè)函數(shù),他的調(diào)用者是誰呢胯杭?
在 Javascript 中驯杜,所有函數(shù)的最頂層的調(diào)用對(duì)象都為全局對(duì)象 Window,所以在這段代碼中做个,調(diào)用函數(shù) n ( 也就是 this 所在的函數(shù) ) 的那個(gè)人鸽心,就是全局對(duì)象 Window,所以console.log(this.c)
這行代碼就變成了console.log(Window.c)
居暖,所以最后的輸出結(jié)果就是:Window.c
看到這里顽频,你是不是有一種豁然開朗的感覺呢?
那么上面那段代碼太闺,應(yīng)該如何改才能讓他繼續(xù)輸出d.c
呢糯景?
其實(shí)很簡(jiǎn)單,只要讓調(diào)用 this 所在函數(shù)的那個(gè)人是 d 對(duì)象就好了省骂。
沒錯(cuò)蟀淮,關(guān)鍵語句就是d.(function () { console.log(this.c) })
,但是這樣寫太繁瑣了冀宴,如果我想在上面那段代碼的基礎(chǔ)上進(jìn)行修改灭贷,該怎么做呢?
其實(shí)也很簡(jiǎn)單略贮,只要把 n 賦值給 d 的某個(gè)新屬性(例如 d.n
)甚疟,然后再調(diào)用這個(gè)方法就可以啦( d.n()
)。完整代碼如下:
var d = {
a: function (n) {
d.n = n
d.n()
},
c: 'd.c'
}
var c = 'Window.c';
d.a(function () {
console.log(this.c)
});
看到這里逃延,你就會(huì)覺得览妖,原來 this 也沒什么大不了嘛。
不過揽祥,理解 this 只是第一步讽膏,更重要的,是要學(xué)會(huì)舉一反三拄丰,這樣才會(huì)掌握的更加扎實(shí)府树、牢固。
此外料按,this 還有很多其他方面需要注意的奄侠,但是我相信,只要你理解了我寫的這部分核心知識(shí)點(diǎn)载矿,你再去看別的關(guān)于 this 的內(nèi)容垄潮,也肯定會(huì)如魚得水,十分順利~
最后,
如果你覺得我的文章對(duì)你有幫助弯洗,
就請(qǐng)動(dòng)動(dòng)你的小手旅急,
給我點(diǎn)一個(gè)贊吧,
你的贊將會(huì)是對(duì)我的最大的鼓勵(lì)和支持~
同時(shí)牡整,
也歡迎優(yōu)秀的你給我提出寶貴的意見和建議藐吮,
我會(huì)不斷努力,
把自己打磨的越來越優(yōu)秀果正。