0%

JavaScript 核心 (41) - 繼承與原型鍊 - 原型在哪裡

原型的特性

  • 一樣具有物件的特性
  • 向上查找
  • 原型可以共用方法及屬性
    向上查找
    原型可以共用方法及屬性

以下用範例操作看看:

1
2
3
4
5
6
7
8
var a = [1, 2, 3];
console.log(a[1], a.length); /* 2 3 */
a.forEach(function(i) {
console.log(i);
/* 1 */
/* 2 */
/* 3 */
})

forEach() 並不是 a 物件內方法,而是在 array 的原型方法
__proto__

1
2
3
4
5
6
7
8
9
10
var a = [1, 2, 3];
var b = [4, 5, 6];
a.__proto__.getLast = function() {
return this[this.length - 1];
};

/* 此時 array 的原型中就有 getLast 函式 */
/* 所以 b 就可以使用 */
console.log(a.getLast()); /* 3 */
console.log(b.getLast()); /* 6 */

由上述範例可知 原型可以共用方法及屬性

1
2
3
4
5
6
7
8
9
10
11
12
var family = {
name: '小明家',
};
family.__proto__.getName = function() {
return this.name;
};

console.log(family.getName()); /* 小明家 */

var b = [4, 5, 6];
b.name = '陣列的屬性';
console.log(b.getName()); /* 陣列的屬性 */

陣列原型__proto__物件原型,也就是最頂層原型
由此可知 原型有多個層級,可以不斷向上查找

參考資料

六角學院 - JavaScript 核心篇