JS原型鏈及繼承
阿新 • • 發佈:2020-11-03
一、原型鏈
原型鏈,中文描述還是很貼切的,字面意思感覺應該是一條類似鏈條的東西,那既然是鏈條,兩端鏈條之間應該會有一個連線的點,如果沒有點,那叫原型繩就好了,就不會叫原型鏈了。
// 廢話少說,上程式碼,先搞一個函式 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,正因這個特性,就有了下面的原型鏈繼承。