JavaScript核心篇-原型在哪裡?

Randy Chen
Randy Chen
Published in
Nov 16, 2020
今天要變成誰~

在JS中,我們還是使用物件的概念來定義原型。

這個概念蠻重要的,因為,以往我用C++在定義類別原型的時候,該原型是類似樣板的概念,即它本身並不是一個實體,這跟JS中的原型特性有蠻大的差別的,不要搞混了~

好,接下來回到JS,如果我們想用某個原型來創建實體,那我們就會讓這個實體去繼承該原型,這樣子創建出來的實體就會具有這個原型的屬性和方法了,所以,實體加上被繼承的原型這樣就是兩個物件的概念。

接下來總結一下,在JS中的原型有哪些特性

  1. 具有物件的特性 -> 即它具有自己的屬性及方法
  2. 向上查找 -> 物件可以透過繼承的原型向上查找
  3. 原型可共用方法及屬性 -> 即當原型變更了它的屬性或方法,則繼承於它的實體也會跟著變更它繼承自原型的方法和屬性
var a = [1, 2, 3];
var family = {
name:'小明家'
}
family.__proto__.getName = function(){
return this.name;
}
a.name = '這是陣列';
console.log(a.getName()); // 回傳"這是陣列"

上面這個例子,family是物件,而它是繼承自原型Object,而陣列實體a,它是繼承自原型Array,而Array又繼承自原型Object。

當陣列實體a在調用getName的時候,會因為原型具有向上查找的特性,即a的原型Array向上查找原型Object就可以找到成員函式getName,所以,getName可以被陣列實體a調用。

--

--

Randy Chen
Randy Chen

Keep fertilizing it, Keep watering it, Keep marching on