1. 程式人生 > 實用技巧 >JS原型鏈及繼承

JS原型鏈及繼承

一、原型鏈

原型鏈,中文描述還是很貼切的,字面意思感覺應該是一條類似鏈條的東西,那既然是鏈條,兩端鏈條之間應該會有一個連線的點,如果沒有點,那叫原型繩就好了,就不會叫原型鏈了。

// 廢話少說,上程式碼,先搞一個函式
function Person() { }

// 使用 new 關鍵字例項化
var man = new Person();

// 問:例項話物件 man 的原型是什麼?
man.__proto__ ===  Person.prototype // 返回 true
// 答:例項話物件 man 的原型指向其建構函式的 prototype 屬性


// 問:建構函式 Person 的原型是什麼?
Person.prototype.__proto__ === Object.prototype // 返回 true
// 答:建構函式 Person 的原型指向內建物件 Object 的 prototype 屬性


// 問:內建物件 Object 的原型是什麼?
Object.prototype.__proto__ === null // 返回 true
// 答: 內建物件 Object 的原型是null


// 綜上所述,換算如下
man.__proto__.__proto__.__proto__ === null // true
// man.__proto__.__proto__.__proto__ 你看這個原型查詢,像不像一條鏈條,那我們就叫它原型鏈吧。

過渡句(承上啟下):在程式碼執行過程中,對例項物件屬性或方法的呼叫,就是在其原型鏈上逐步向上查詢(孫子沒有查兒子,兒子沒有查老子,老子沒有查爺爺...),如果查到null還沒有找到,那麼就返回null,正因這個特性,就有了下面的原型鏈繼承。

二、原型鏈繼承