1. 程式人生 > >javascript中函式、物件、原型鏈等的深入自我理解

javascript中函式、物件、原型鏈等的深入自我理解

js中以物件為核心,所有皆物件。

狹義的講,js中的物件比較純粹,就是一個大括號包裹的鍵值對,鍵為名(有待深入解析,可能就是語法本身),值為物件。

這個基本要素和C++比較接近,並沒有憑空創造出新的語法來完成這個物件(類)的構造過程。

函式本身是物件,可以作為物件中的值存在,同時就換了個名字,即該物件的方法。

但是函式+()則變成了一個函式過程,這個過程本身不能作為物件,就像程式的哲學終極意義解剖開來,必定是一個物的變化。

那麼這個物是物件,這個變化就是函式過程了。

任何一段打出來的js語句都是函式過程。

js中有一個原型物件由Object這個函式創造,任何通過function()定義的函式,直接執行是函式過程,同時也是這個程式執行時頂級window的一個方法,this即指向於此。

如果通過new + 函式名()的形式,則返回的是通過這個函式加工的一個例項物件,原料則是Object函式創造的一個例項。

狹義的函式有prototype屬性,所有物件皆有__proto__屬性。

當一個原料物件通過一個函式加工成一個例項物件時,則這個例項物件的__proto__屬性則會複製該函式的prototype屬性。

那麼prototype屬性本身也是一個物件,他又是由哪個函式創造的呢,他的__proto__屬性又等於哪個函式的prototype屬性呢?

很顯然,就是Object函式。那麼Object函式的原料是什麼呢?他的prototype屬性是由哪個函式創造的呢,答案是null,Object.prorotype.__proto__==null

所謂原型鏈指的就是這個。

道生一,一生二,二生三,三生萬物。

所謂的js的繼承就是這個三生萬物,用的方法也是一樣的。

讓子函式的prototype=父函式的一個例項即可。

子例項的創造只要用父函式的例項作為原料通過這個函式過程加工下即可。

js力求簡單,少了很多實在的概念,相對於python來說沒有將很多底層的東西封裝成一個個的概念,因此也難於理解,但是一旦理解了,就到達了根源。

其實計算機程式語言的深入理解必然要從硬體實現方法,到彙編,到C這種純函式式的過程,到C++以及各種其他語言製造的語法糖式的程式設計符號來反向追溯,如果能將這個體系完全清晰的架立在自己腦海中,做到了這一點,不僅可以立即學會並精通一門新的語言,而且作為一門語言新的創始人也是簡簡單單的事情。