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