3分鐘簡單瞭解 prototype 和 __proto__
阿新 • • 發佈:2018-12-22
關於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