理解原型和原型鏈

無論何時,js原型是前端沒法繞過去的問題,因此今天抽空總結一下,方便後續學習。

初步會總結如下文章

  • 什麼是原型、和原型鏈
  • js繼承的方式
  • es5如何實現class

第一篇:什麼是原型和原型鏈

爲何要討論原型和原型鏈?

Javascript的數據類型分爲基本數據類型(String、Number、Boolean 、Undefined、Null、Symbol)和引用數據類型,除了基本數據類型外,剩下的都是對象,可是因爲js中沒有類(class 在ES6中引入了class,其實知識語法糖,本質仍是沒變),如何將這些對象聯繫起來,如何共享這些對象中的方法和屬性,因而就有了原型和原型鏈的概念。(其實就是怎麼能解決繼承的問題)html

原型:

英文單詞 prototype; 發音:['proʊtə.taɪp],是每一個函數中的一個私有屬性,這個屬性是個指針,指向了它的原型對象 prototype object;前端

函數a,經過打印a.prototype ,能夠打印出它的原型對象,可是經過構造函數B實例化出來的實例對象b,打印prototype屬性時候確是undefined函數

因此說只有函數纔有prototype這個屬性,經過這個屬性才能訪問到它的原型對象;

原型對象:

prototype object,每個對象都有一個原型對象學習

原型鏈:

每一個實例對象都有一個私有屬性__proto__指向它的構造函數的原型對象(prototype object)。該原型對象內部也有一個私有屬性__proto__指向它的原型對象,這樣層層向上直到一個對象的原型對象爲null。null沒有原型對象,並做爲這個原型鏈中的最後一個環節。this

構造函數,實例對象,原型對象三者的關係圖:

如何理解上面的圖片

  • 構造函數:首先明確它是一個對象,同時它也能夠是一個普通函數,在它的內部有一個私有屬性prototype,是一個指針,指向了它的原型對象。
  • 經過new 實例化出來的實例對象內部有一個私有屬性__proto__ ,指向了它的原型對象;
  • 在原型對象中有一個constructor屬性,又指️向了構造函數;

這樣就將它們聯繫起來了;es5

html:
function P(name,age){
        this.name = name;
        this.age = age;
    }
    const p = new P('Nichlas',18);
    console.log(p.__proto__);
複製代碼

html:
  const n = new Number(1);
  console.log(n);
  console.log(n.__proto__);
複製代碼

相關文章
相關標籤/搜索