1. 程式人生 > 實用技巧 >前端:原型和原型鏈

前端:原型和原型鏈

一、原型

所有引用型別都有一個__proto__(隱式原型)屬性,屬性值是一個普通的物件
所有函式都有一個prototype(原型)屬性,屬性值是一個普通的物件
所有引用型別的__proto__屬性指向建構函式的prototype

var a = [1,2,3];
a.__proto__ === Array.prototype; // true

二、原型鏈

當訪問一個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的__proto__隱式原型上查詢,即它的建構函式的prototype

如果還沒有找到就會再在建構函式的prototype__proto__中查詢,這樣一層一層向上查詢就會形成一個鏈式結構,我們稱為原型鏈


function Parent(month){
    this.month = month;
}
var child = new Parent('Ann');
console.log(child.month); // Ann
console.log(child.father); // undefined

在child中查詢某個屬性時,會執行下面步驟

訪問鏈路為:

①一直往上層查詢,直到到null還沒有找到,則返回undefined
Object.prototype.__proto__ === null
③所有從原型或更高階原型中的得到、執行的方法,其中的this在執行時,指向當前這個觸發事件執行的物件