JS原型鏈

JS原型鏈

回顧一下類,實(shí)例,prototype,__proto__的關(guān)系

    function People (name,age) {
        this.name = name;
        this.age = age;
    }
    People.prototype = {
        sayName: function () {
          console.log(this.name);
        },
    }
    var p1 = new People('deejay',21);
    p1.sayName();
類,實(shí)例,prototype,__proto__

另外有:

    p1.__proto__.constructor === People; // true
    People.prototype.constructor === People; //true
    p1.constructor === People; //true

對于p1.construcror來說,在p1中找不到相應(yīng)的屬性,就回到__proto__中尋找,其實(shí)找到的是People.prototype中的constructor,和第2行等價(jià)

任何一個對象,只要是一個對象,那么總有一個函數(shù)創(chuàng)建了它,這個對象的__proto__屬性等于創(chuàng)建它的函數(shù)的prototype
比如說People.prototype也是一個對象,也有__proto__屬性,其中的constructor指向了Object(),即是Object()創(chuàng)建的對象,其prototype屬性等于People.prototype.__proto__.

詳細(xì)的原型鏈

原型鏈

在上圖中有幾個需要注意的特殊點(diǎn):

  • Object.prototype.__proto__為null,其實(shí)就是不存在
  • Function.prototype也是一個對象,即也是Object()創(chuàng)建的
  • 對于Function自身來說,也是一個對象,也有__proto__屬性,F(xiàn)unction.__proto__.constructor === Function,即Function創(chuàng)建了所有的函數(shù),包括他自己。
  • 對于Object.__proto__.constructor === Function,還是那句話,F(xiàn)unction創(chuàng)建了所有的函數(shù),包括他自己。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容