各位看官,樓主開(kāi)始說(shuō)過(guò)寫(xiě)幾篇博客,這是這個(gè)系列的最后一集。吾以為:了解JavaScript的身世之謎,掌握其近乎心想事成的變量系統(tǒng),了解其解析運(yùn)行的偷梁換柱之法,熟悉布大師迂回曲折的OOP實(shí)現(xiàn)。那你離height level也不遠(yuǎn)了。當(dāng)然,要想height level還要再掌握兩個(gè)常常被各位園友掛在嘴邊的東西:this與閉包。this是什么鬼?閉包又是什么鬼?照本宣科的概念,這里不說(shuō),我們只聊“因?yàn)樗浴薄U話少說(shuō),開(kāi)聊!
this是什么鬼?
this這玩兒稱呼為鬼一點(diǎn)不為過(guò),好多小白一看滿屏都是this的腳本瞬間眩暈。看樣子有點(diǎn)像Java、C#之類的this,但憑直覺(jué)好像又超越了Java、C#的this,看得是隱隱約約、似懂非懂。各種度娘、G哥大部分得到的都是照本宣科的解析。用心的會(huì)記下并研究的,無(wú)心的大大咧咧過(guò)目而已。于是乎,好多老鳥(niǎo)都沒(méi)徹底搞清楚this是什么鬼。要想了解this是什么鬼,那得先了解這鬼是怎么來(lái)的。
話說(shuō)JavaScript的設(shè)計(jì)初衷是過(guò)程式的,后面布大師為了緊跟時(shí)代潮流,迂回曲折地實(shí)現(xiàn)OOP,為此引入了this來(lái)表示實(shí)例對(duì)象。OOP是實(shí)現(xiàn),但是JavaScript的世界從此多了一個(gè)this。this在應(yīng)用于JavaScript的OOP時(shí)候,表示的是實(shí)例本身。但是如果我寫(xiě)的JavaScript并不需要new對(duì)象,而是隨意到處寫(xiě)了this,那這個(gè)時(shí)候this代表什么?真所謂填一坑挖一坑??!有坑得填啊,于是,布大師又想折子給這個(gè)this賦予意義了:當(dāng)this應(yīng)用于OOP的時(shí)候,它表示實(shí)例本身;而當(dāng)this應(yīng)用于非OOP的時(shí)候則表示this所在元素的歸屬對(duì)象。這話說(shuō)來(lái)說(shuō)去還是有點(diǎn)抽象,看代碼最實(shí)在:
1)當(dāng)this在function中,但是funciton只是過(guò)程式函數(shù)