1. 程式人生 > >prototype & _proto_

prototype & _proto_

每個js學習者的必經之路,雖然複雜,必須攻克。網上收集的資源會不定期更新到這裡。沒事了看看。

 

在JS中並不是所有物件都擁有 prototype 屬性,只有函式型別的變數擁有該屬性。也就是隻有通過 function ,或者是與 function 對應的構造方法 new Function() 宣告的變數。

而所有的JS物件是存在一個內建的 [[Prototype]] 屬性,指向它“父類”的 prototype 。在Node當中就提供了一個 __proto__ 代替了這個屬性指向父類的 prototype

通過以下這種方式,就能獲得一個物件的 root 原型。

var Obj = function(){};
var o = new Obj();
o.__proto__ === Obj.prototype;  //=> true
o.__proto__.constructor === Obj; //=> true

Obj.__proto__ === Function.prototype; //=> true
Obj.__proto__.constructor === Function; //=> true

Function.__proto__ === Function.prototype; //=> true
Object.__proto__ === Object.prototype;     //=> false
Object.__proto__ === Function.prototype;   //=> true

Function.__proto__.constructor === Function;//=> true
Function.__proto__.__proto__;               //=> {}
Function.__proto__.__proto__ === o.__proto__.__proto__; //=> true
o.__proto__.__proto__.__proto__ === null;   //=> true