javascript面向對象編程學習(一)

在學習javascript面向對象編程以前,咱們有必要先了解什麼是原型和原型鏈!javascript

1. 什麼是原型?

javascript中,函數能夠有屬性。 每一個函數都有一個特殊的屬性叫做原型(prototype
①全部引用類型都有一個__proto__(隱式原型)屬性,屬性值是一個普通的對象
②全部函數都有一個prototype(原型)屬性,屬性值是一個普通的對象
③全部引用類型的__proto__屬性指向它構造函數的prototypejava

var b = {}
b.__proto__ === Object.prototype; // true
複製代碼

2. 什麼是原型鏈?

JavaScript 只有一種結構:對象。每一個實例對象( object )都有一個私有屬性(稱之爲 __proto__ )指向它的構造函數的原型對象(prototype )。該原型對象也有一個本身的原型對象( __proto__ ) ,層層向上直到一個對象的原型對象爲 null
根據定義,null 沒有原型,並做爲原型鏈中的最後一個環節。編程

2.1 訪問對象屬性的過程是怎樣的?

當咱們訪問對象的某個屬性時,首先在對象自己查找;若是沒有,則會去它的原型__proto__查找,也就是他的構造函數的原型對象(prototype),若是仍是沒找到就會繼續在構造函數的prototype__proto__查找,這樣一層層往上查找,若是找到null尚未找到此屬性,則返回undefined函數

eg:學習

function Fruits(name){
   this.name = name;
}

const variety = new Fruits('香蕉');
console.log(variety.name); // 香蕉
console.log(variety.num);  // undefined
console.log(Fruits.prototype === variety.__proto__); // true
console.log(Object.prototype.__proto__ === null); // true
複製代碼

查找步驟: variety中查找屬性 -> variety.__proto__(Fruits.prototype) -> Fruits.prototype.__proto__(Object.prototype) -> Object.prototype.__proto__(null) -> 返回undefinedui

說明:this

  • 當執行以上步驟中,若是查找到該值,即返回該值;
  • 由於Fruits.prototype是對象,因此其構造函數爲Object
  • console.log(Fruits.prototype.__proto__ === Object.prototype);   // true
    複製代碼

4. 參考文獻

1、【原型和原型鏈】什麼是原型和原型鏈
2、對象原型
3、繼承與原型鏈spa

5. 總結

其實原型鏈就好像一個子孫找祖宗的過程,根據是否有血緣關係,一層一層往上找!.net

6. tip

本人正在嘗試寫博客,寫得很差輕噴,指出就好!prototype

相關文章
相關標籤/搜索