在學習
javascript
面向對象編程以前,咱們有必要先了解什麼是原型和原型鏈!javascript
在
javascript
中,函數能夠有屬性。 每一個函數都有一個特殊的屬性叫做原型(prototype
)
①全部引用類型都有一個__proto__(隱式原型)屬性,屬性值是一個普通的對象
②全部函數都有一個prototype(原型)屬性,屬性值是一個普通的對象
③全部引用類型的__proto__屬性指向它構造函數的prototypejava
var b = {}
b.__proto__ === Object.prototype; // true
複製代碼
JavaScript
只有一種結構:對象。每一個實例對象(object
)都有一個私有屬性(稱之爲__proto__
)指向它的構造函數的原型對象(prototype
)。該原型對象也有一個本身的原型對象(__proto__
) ,層層向上直到一個對象的原型對象爲null
。
根據定義,null
沒有原型,並做爲原型鏈中的最後一個環節。編程
當咱們訪問對象的某個屬性時,首先在對象自己查找;若是沒有,則會去它的原型
__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
) -> 返回undefined
。ui
說明:this
Fruits.prototype
是對象,因此其構造函數爲Object
console.log(Fruits.prototype.__proto__ === Object.prototype); // true
複製代碼
1、【原型和原型鏈】什麼是原型和原型鏈
2、對象原型
3、繼承與原型鏈spa
其實原型鏈就好像一個子孫找祖宗的過程,根據是否有血緣關係,一層一層往上找!.net
本人正在嘗試寫博客,寫得很差輕噴,指出就好!prototype