? ? ? ? ? ? ? ? ? ? ?眾所周知,努力是成功的唯一途徑? ? !

。圖源自網(wǎng)絡? ?如有侵權? 聯(lián)系刪除? 。
一、原型
①所有引用類型都有一個__proto__(隱式原型)屬性,屬性值是一個普通的對象
②所有函數(shù)都有一個prototype(原型)屬性,屬性值是一個普通的對象
③所有引用類型的__proto__屬性指向它構造函數(shù)的prototype
var a = [1,2,3];
a.__proto__ === Array.prototype; // true
二、原型鏈
當訪問一個對象的某個屬性時,會先在這個對象本身屬性上查找,
如果沒有找到,則會去它的__proto__隱式原型上查找,即它的構造函數(shù)的prototype,
如果還沒有找到就會再在構造函數(shù)的prototype的__proto__中查找,
這樣一層一層向上查找就會形成一個鏈式結構,我們稱為原型鏈。
舉例,有以下代碼:
function Parent(month){
? ? this.month = month;
}
var child = new Parent('Ann');
console.log(child.month); // Ann
console.log(child.father); // undefined
在child中查找某個屬性時,會執(zhí)行下面步驟:

如圖
訪問鏈路為:

如圖
①一直往上層查找,直到到null還沒有找到,則返回undefined
②Object.prototype.__proto__ === null
③所有從原型或更高級原型中的得到、執(zhí)行的方法,其中的this在執(zhí)行時,指向當前這個觸發(fā)事件執(zhí)行的對象
