#上面是我在瀏覽器中的測試,懵逼了,這種原型鏈完全看不懂。誰能幫忙解釋一下
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
Object 是一個函數,不要被它的名字誤導了,所以先腦中補完這個形式
任何函式(建構函式)都有原型,也就是prototype,prototype沒什麼特別的,就是一個物件。
Object.prototype 輸出 “Object { ... }", 不要被這個輸出誤導,以為Object.prototype是它自己。輸出裡的「Object」只是說Object.prototype的值「是一個」Object「類型」的物件。
但同時因為JS裡function本身也是對象,所以Object除了是函數,也是對象。所有的物件都是根據某個原型「構造」(初始化)而來的.
Object作為物件是什麼時候建構出來的?
答:當它被定義的時候,也就是:
這時JS運行時就依據 function () { [Native code] } 為原型建構了Object這個函數「物件」(實例)。
這個 function () { [Native code] } 是什麼?它是JS裡所有函數的祖先。
Object.__proto__.__proto__ 即這個祖宗函數的原型,既然是祖先怎麼會有原型?記住它是函數的祖宗,但它不是「物件」的祖宗,物件的祖宗,就是這個 「Object {__defineGetter__: ...}" 。
你又問,既然物件都是建構而來的,那祖宗對像也應該是建構而來的吧?祖宗對像是萬物起源,它是JS的語言設計者定義的,是概念體系的出發點。
可是我看到
祖宗對像不明明是建構而來的?而且是由Object構造而來的?
這只不過是JS的語言設計者為了概念一致,把祖宗物件的constructor指向了Object而已。
祖宗對象之前是什麼呢?
道生一,一生二。
道是無。
itlr.cc