1. 程式人生 > >3分鐘簡單瞭解 prototype 和 __proto__

3分鐘簡單瞭解 prototype 和 __proto__

關於prototype

1. 所有的函式都會有一個prototype屬性,屬性值是一個普通物件;

2. 當我們去new一個建構函式的例項時,建構函式的原型物件(prototype)會被賦值給它例項的[[Prototype]]屬性上;

3. prototype可被稱為“顯式原型”。

關於__proto__

1. 首先它未被ECMAScript標準化,但卻被被大多數瀏覽器廠商所支援;

2. 所有物件(null,undefined除外)都具有__proto__屬性;

3. 物件的__proto__屬性指向它的構造器的prototype屬性;

4. __proto__ 可被稱為“隱式原型”;

5. ES2015對其進行了標準化。

關於兩者

 1 // 普通函式
 2 function func() {}
 3 
 4 func.prototype // { constructor: function func(), ... }
 5 
 6 // 建構函式
 7 function F() {}
 8 
 9 F.prototype // { constructor: function func(), ... }
10 
11 // 例項測試
12 var f = new F()
13 
14 f.__proto__ // { constructor: function func(), ... }
15 
16 f.__proto__ === F.prototype //
true 17 18 // ES2015標準化[[Prototype]]屬性,Object.getPrototypeOf/Object.setPrototypeOf 19 Object.getPrototypeOf(f) === F.prototype