從初學到如今,我發現關於原型鏈的解釋都停留在原型鏈自己,從一個事物的多方面去了解一個事物,是很是有益的,因此今天忽然就有靈感(實際上是壓制不住本身的思惟),藉助鏈表和javascript類背後的原型委託思想來解釋原型。javascript
就像咱們通常設置的鏈表中的next指針,javascript爲了咱們提供了內置的next指針__proto__,對於原型鏈表,因爲不想普通單向鏈表項同樣都是同一個類派生的對象,在這裏我稱原型鏈爲特殊鏈表java
這裏提一下,JavaScript自己並無提供「繼承」,繼承的本意是複製,而javascript自己實現所謂的繼承,是將屬性進行代理獲得的,而代理的意思,就是我在你身上沒有找到屬性,那麼就去與你關聯的上級**__proto__連接的下一個節點**去找這個屬性git
原型鏈的本質是爲了實現屬性的[[GET]]操做,prototype我認爲是爲了在使用構造函數建立對象時,自動設置鏈表中的next屬性,即將對象的__proto__連接到構造函數的prototype屬性的語法糖github
let a = {
a: 1
}
let b = {
b: 2
}
let c = {
cj: "cc"
}
Object.setPrototypeOf(a,b) // 等同於a.__proto__ = b
Object.setPrototypeOf(b, c) // 等同於 b.__proto__ = c
console.log(a.cj)
console.log(a.b)
console.log(a.a)
複製代碼
這裏無需藉助構造函數的prototype屬性,同樣能夠實現屬性的委託。函數
一條可以讓在內部實現屬性代理的委託鏈表學習
原型鏈是一條是對象自身做爲頭節點,內置的__proto__做爲next指針,構造器的prototype做爲後續節點的特殊單鏈表ui
如今不像之前大佬們開荒,全靠自學,不少大佬們都出了本身的博客,寫的很好,我但願可以沉進去技術裏面,因此不時會埋頭寫點文章,但願可以獲得你們的小星星,以資鼓勵,固然新人寫的東西,不管是排版仍是嚴謹方面都有待提升,更多但願你們提出本身的意見,幫助我這個萌新學習。spa