JS的物件導向:__proto__/protype

tingyiiii
tingyiiii
Published in
Jan 2, 2021

JavaScript 是一個以雛型為基礎 (Prototype-based) 的程式設計語言 (或更準確的說是以雛型為基礎的腳本語言),它採用了複製的模式而非繼承。(源自MDN)

在JS OOP中繼承概念使用的是原型鏈(Prototype Chain),也就是透過原型(Prototype)去繼承並存取其他物件的屬性~就像是上圖中的鏈條,一環扣一一環串接下去,每一個環就代表一個原型(Prototype)!

Object.create(xxx)

以xxx物件為原型(protype),複製出新的物件

白話文:複製出鍊條的下一個環XD

const human = {
action: function(){
console.log('eat')
}
}
const man = Object.create(human)man.action() #=> eat

man擁有的human的屬性,因為在JS中若本身沒有的屬性,則會沿著原型鏈(Prototype Chain)向上找

__proto__

每個物件都有此屬性,表示原型鏈連到的原型物件(protype)

白話文:鍊條的上一個環XD

const human = {
action: function(){
console.log('eat')
}
}
const man = Object.create(human)
const woman = Object.create(human)
man.__proto__ === woman.__proto__ #=> true

protype(原型物件)

function或是語法糖衣class特有的屬性、function或class NEW 出來的物件,__proto__會=function或class的prototype,而不會是他們本身

function apple(){
console.log('🍎')
}
const orange = new appleorange.__proto__ === apple.prototype #=> true

補充:

new function/class

1. 進入泡泡
2. 建立空物件 { }
3. this -> { }
4. 把 { }.__proto__ -> function 的 prototype
5. return this

--

--