上一集中,重點(diǎn)介紹了誰動(dòng)了你的代碼。這里先總結(jié)一下:咱們的代碼從敲下來到運(yùn)行出結(jié)果,經(jīng)歷了兩個(gè)階段:分析期與運(yùn)行期。在分析期,JavaScript分析器悄悄動(dòng)了我們的代碼;在運(yùn)行期,JavaScript又按照自己的一套機(jī)制進(jìn)行變量尋找。我們的代碼是如何被動(dòng)了手腳的,相信看官你已經(jīng)明白。但是前面所聊均是面向過程的,如果說只是簡(jiǎn)單的面向過程言語,那JavaScript能夠有基本的數(shù)據(jù)類型,基本的執(zhí)行單元那也差不多了。但是故事并沒有在此結(jié)束。接下來劇情的發(fā)展,那才是造成今天鞋同們困惑的地方,那們還是從故事開始。大伙不要嫌樓主啰嗦(樓主確實(shí)是個(gè)啰嗦之人),講這故事是為了讓大伙了解當(dāng)年布大師設(shè)計(jì)JavaScript的背景,融入布大師的設(shè)計(jì)思維,你就知道JavaScript為什么會(huì)有哪些奇怪的設(shè)計(jì)。好,故事開始了。
前幾集的故事中,咱們提到了布大師只想設(shè)計(jì)一個(gè)簡(jiǎn)單、滿足瀏覽器進(jìn)行數(shù)據(jù)檢驗(yàn)的腳本言語。當(dāng)時(shí)的web應(yīng)用毫無顏值,猶如白紙黑字,頂多再加點(diǎn)圖片。所以,你也別期待當(dāng)時(shí)的布大師會(huì)想到如UI交互、動(dòng)畫效果等等的設(shè)計(jì)需求。為此,從一開始布大師設(shè)計(jì)的JavaScript就是一個(gè)過程式的簡(jiǎn)單的言語,但是布大師也不是個(gè)迂腐落后之人。c的升級(jí)版c++、讓編程界有點(diǎn)瘋狂的Java,布大師也不能視而不見,多少受點(diǎn)影響。于是乎,布大師想:我這JavaScript能否也玩點(diǎn)OOP思想呢?布大師這么一想,一堆問題就來了,本來就沒打算搞個(gè)正式的OOP腳本,也沒設(shè)計(jì)有class、extend,更沒有override啥的。但是今天拍腦袋一想要玩OOP,那總得在現(xiàn)有的設(shè)計(jì)基礎(chǔ)上去實(shí)現(xiàn)OOP三大思想(封裝、繼承、多態(tài))吧。那咱們就看看布大師是如何給JavaScript賦予OOP的。
封裝
概念,樓主就不說了。但是你看看JavaScript定義的那些數(shù)據(jù)類型,壓根就沒class的概念。沒有類何來實(shí)例,沒有實(shí)例談何封裝?布大師翻來覆去研究已經(jīng)定義的數(shù)據(jù)類型,再對(duì)比了c++、java。他發(fā)現(xiàn)c++、java每次創(chuàng)建對(duì)象都離不開調(diào)用構(gòu)造函數(shù)。布大師靈感一來“對(duì)!繞過class直接調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象,剛好function可以作為構(gòu)造函數(shù)”。于是乎,你見到了今天JavaScript是這樣創(chuàng)建實(shí)現(xiàn)對(duì)象的:
延伸閱讀
我想了解如何學(xué)習(xí) |