1. 程式人生 > >淺談JS中的原型對象和原型鏈

淺談JS中的原型對象和原型鏈

並且 nbsp 繼承 div prototype strong 存在 除了 函數

我們知道原型是一個對象,其他對象可以用它實現屬性繼承,除了prototype,又有__proto__

1. prototype和__proto__的區別

技術分享圖片

prototype是函數才有的屬性 __proto__是每個對象都有的屬性

但是__proto__不是一個規範的屬性,只是部分瀏覽器

實現了此屬性,對應標準的屬性是[[Prototype]]

技術分享圖片

2. __proto__屬性指向誰?

__proto__的指向取決於對象創建時的實現方式。

var a = {}

技術分享圖片

var A = function(){};

var a = new A();

技術分享圖片

var a1 = {}

var a2 = Object.create(a1);

技術分享圖片

什麽是原型鏈?

由於__proto__是任何對象都有的屬性,而js裏萬物皆對象,所以會形成一條__proto__連起來的鏈條,遞歸訪問__proto__必須最終到頭,並且值是null.

當js引擎查找對象的屬性時,想查找對象本身是否存在該屬性,如果不存在,會在原型鏈上查找,但不會查找自身的perototype

var A = function(){};

var a = new A();

技術分享圖片

var A = function(){};
var a = new A();
console.log(a.__proto__);   // A{}(即構造器function A的原型對象)
console.log(a.__proto__.__proto__); // Object{}(即構造器function Object的原型對象)
console.log(a.__proto__.__proto__.__proto__); //null

原文:https://www.cnblogs.com/shuiyi/p/5305435.html

淺談JS中的原型對象和原型鏈