javascript - Object和Function的原型鏈問題
仅有的幸福
仅有的幸福 2017-05-19 10:11:54
0
1
523

#上面是我在瀏覽器中的測試,懵逼了,這種原型鏈完全看不懂。誰能幫忙解釋一下

仅有的幸福
仅有的幸福

全部回覆(1)
滿天的星座

Object 是一個函數,不要被它的名字誤導了,所以先腦中補完這個形式

function Object () {
  ...
}

任何函式(建構函式)都有原型,也就是prototype,prototype沒什麼特別的,就是一個物件。

Object.prototype 輸出 “Object { ... }", 不要被這個輸出誤導,以為Object.prototype是它自己。輸出裡的「Object」只是說Object.prototype的值「是一個」Object「類型」的物件。

但同時因為JS裡function本身也是對象,所以Object除了是函數,也是對象。所有的物件都是根據某個原型「構造」(初始化)而來的.

Object作為物件是什麼時候建構出來的?

答:當它被定義的時候,也就是:

function Object() {
  ...
}

這時JS運行時就依據 function () { [Native code] } 為原型建構了Object這個函數「物件」(實例)。

這個 function () { [Native code] } 是什麼?它是JS裡所有函數的祖先。

Object.__proto__.__proto__ 即這個祖宗函數的原型,既然是祖先怎麼會有原型?記住它是函數的祖宗,但它不是「物件」的祖宗,物件的祖宗,就是這個 「Object {__defineGetter__: ...}" 。

你又問,既然物件都是建構而來的,那祖宗對像也應該是建構而來的吧?祖宗對像是萬物起源,它是JS的語言設計者定義的,是概念體系的出發點。

可是我看到

Object.prototype.constructor
function Object() { [native code] }

祖宗對像不明明是建構而來的?而且是由Object構造而來的?

這只不過是JS的語言設計者為了概念一致,把祖宗物件的constructor指向了Object而已。

祖宗對象之前是什麼呢?

Object.prototype.__proto__
null

道生一,一生二。
道是無。

itlr.cc

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板