JavaScript核心篇-原型鍊是什麼?

Randy Chen
Randy Chen
Published in
Nov 15, 2020
原型鍊的概念

在JavaScript中,實體可以繼承一種原型,而原型本身也可以繼承其它的原型,這兩種原型,都可以有屬於自己的屬性和方法,而這種一層一層往上繼承的方式,我們就稱它為原型鍊。

原型練這個概念重要的地方在於實體查找屬性或方法的方式,實體會依循原型鍊繼承的脈絡,一層一層向上查找,直到找到被實體呼叫的屬性或方法為止。

var a = [1, 2, 3];
var b = [4, 5, 6];
a.__proto__.getLast = function(){
return this[this.length-1];
}
console.log(b.getLast()); // 回傳b陣列最後一個元素6

以上面這個例子,b透過原型鍊的脈絡,往上查找其原型陣列是否有成員函式getLast。

因為a和b的原型都同樣是陣列,而a替其原型陣列新增了一個成員函式getLast,故b是可以找的到getLast這個成員函式的,所以,就可以使用getLast函式。

var b = [4, 6, 7];
var family = {
name:'小明家'
}
family.__proto__.getName = function(){
return this.name;
}
b.name = '陣列';
console.log(b.getName());

以上面這個例子,雖然family的原型是Object,b的原型是陣列,看起來好像不一樣,但是,陣列的原型其實也是Object。

而我們利用family所創建的getName()成員函式是屬於原型Object的。

故b可以透過原型鍊的方式向上查找,第一層的原型是陣列,但是,陣列沒有getName這個成員函式,接著,再往上找一層原型Object,就找到getName這個成員函式,b也就可以正常調用getName這個函式囉~

--

--

Randy Chen
Randy Chen

Keep fertilizing it, Keep watering it, Keep marching on