這篇文章不會仔細闡述函數屬性prototype、__proto__來源作用等基礎知識,所以請確保你有相關基礎。 要點 一、__proto__指向本對象的構造函數的原型(prototype) 二、所有構造器函數都來源於Function.prototype 三、js中所有事物都是對象,所有對象都來源於O ...
這篇文章不會仔細闡述函數屬性prototype、__proto__來源作用等基礎知識,所以請確保你有相關基礎。
要點
一、__proto__指向本對象的構造函數的原型(prototype)
二、所有構造器函數都來源於Function.prototype
三、js中所有事物都是對象,所有對象都來源於Object.prototype
這是解開筆者原來關於原型鏈的疑惑的關鍵三點,下麵分別闡釋各要點的含義。
第一點闡釋
var person = function(){}
var p = new person()
那麼就有
p.__proto__===person.prototype
但是person.__proto__上面又指向誰呢?
這就要說第二點了
第二點闡釋
我們所常見的構造器函數有Array()、String()、Number()、Object()等,她們在原型鏈中有如下表現
Array.__proto__===Function.prototype //true
String.__proto__===Function.prototype //true
Number.__proto__===Function.prototype //true
Object.__proto__===Function.prototype //true
甚至是Function本身也是如此
Function.__proto__===Function.prototype //true
這就很好地說明瞭:所有構造器函數都來源於Function.prototype
還順便解釋了一些不合常理的等式
Function.__proto__===Object.__proto__
第三點闡釋
關於這一點有如下表現
Function.prototype.__proto__===Object.prototype //true
追溯到最頂層就是原型鏈的終點null了
Object.prototype.__proto__===null //true