【JavaScript筆記 · 基礎篇(十)】物件導向程式設計之三:繼承機制
深入理解過JavaScript中的物件體系(基於建構函式(constructor)和原型物件(prototype))過後,再來學習JS中的繼承機制就很簡單啦~
文章目錄
一. 原型鏈單繼承
前兩篇部落格裡詳細介紹了建構函式(constructor
)和原型物件(prototype
),多多少少都已經講過繼承的知識了,這裡就再系統羅列一下。
講這一部分之前,我們先來定義一個父建構函式Animal()
及其原型物件Animal.prototype
——
// 父建構函式
function Animal (name,age){
this.name = name;
this.age = age;
};
// 父建構函式原型物件
Animal.prototype = {
constructor:Animal,
color:"white",
sayName:function(){
console.log("my name is",this.name);
},
sayAge:function(){
console.log("my age is",this.age);
}
};
這裡介紹三種單繼承的子建構函式的寫法,略有不同,按需而定:
1.1 第一步 —— 子類繼承父類的例項
具體分為兩個步驟:
1.1.1 呼叫父建構函式
通過call()
方法把子類例項物件的this
繫結到父建構函式來呼叫,這樣子類例項也會具有父類例項的屬性:
// 子建構函式
function Dog(name,age,gender){
Animal.call(this,name,age); // 借用建構函式
this.gender = gender;
};
1.1.2 設定base屬性
// 子建構函式
function Dog(name,age,gender){
this.base = Animal;
this.base(name,age);
this.gender = gender;
};
1.2 第二步 —— 子類繼承父類的原型
1.2.1 父類原型物件的克隆物件
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
// 健全關係
這裡切記是讓Dog.prototype
等於父類原型物件的克隆物件(通過Object.create()方法
生成),而不是直接等於Animal.prototype
。否則之後對Dog.prototype
的操作,也會連父類的原型Animal.prototype
一起修改掉。
宣告一個Dog
的例項物件wangcai
,可以看到他可以正常訪問其祖先級建構函式Animal
中的屬性和方法:
var wangcai = new Dog("wangcai",2,"male");
console.log(wangcai.name);
console.log(wangcai.color);
wangcai.sayName();
——————OUTPUT——————
wangcai
white
my name is wangcai
instanceof
運算子用來判斷當前物件是否為某個建構函式的例項,返回一個布林值。wangcai對Dog和Animal都返回了true。
console.log(wangcai instanceof Dog);
console.log(wangcai instanceof Animal);
——————OUTPUT——————
true
true
1.2.2 父類的一個例項
Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;
// 健全關係
1.3
兩種方法:原型鏈繼承和借用建構函式。
// 子建構函式
function Dog(name,age,gender){
Animal.call(this,name,age); // 借用建構函式
this.gender = gender;
};
Dog.prototype = new Animal(); // 原型鏈繼承
Dog.prototype.constructor = Dog; // 健全關係
Dog.prototype.sayGender= function (){
console.log("my gender is",this.gender);
};
// 建立例項物件
var dog = new Dog("zevin",21,"male");
console.log(dog.constructor);
dog.sayGender();
dog.sayName();
——————OUTPUT——————
[Function: Dog]
my gender is male
my name is zevin
二. 多重繼承
相關文章
- Kotlin 物件導向程式設計 (OOP) 基礎:類、物件與繼承詳解Kotlin物件程式設計OOP繼承
- JS物件導向程式設計(四):繼承JS物件程式設計繼承
- java-物件導向程式設計--繼承Java物件程式設計繼承
- Javascript物件導向與繼承JavaScript物件繼承
- ~~核心程式設計(五):物件導向——多繼承~~程式設計物件繼承
- Javascript實現物件導向繼承JavaScript物件繼承
- 程式設計基礎·Java學習筆記·物件導向(下)程式設計Java筆記物件
- 理解Js中物件導向程式設計的繼承JS物件程式設計繼承
- 說清楚javascript物件導向、原型、繼承JavaScript物件原型繼承
- JavaScript物件導向 ~ 原型和繼承(1)JavaScript物件原型繼承
- 《JavaScript物件導向精要》之五:繼承JavaScript物件繼承
- JavaScript物件導向那些東西-繼承JavaScript物件繼承
- JavaScript物件導向—繼承的實現JavaScript物件繼承
- Golang物件導向程式設計之繼承&虛基類【組合&介面】Golang物件程式設計繼承
- Python - 物件導向程式設計 - 三大特性之繼承Python物件程式設計繼承
- 物件導向--繼承物件繼承
- 物件導向:繼承物件繼承
- 物件導向-繼承物件繼承
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- python基礎(物件導向程式設計)Python物件程式設計
- python物件導向程式設計基礎Python物件程式設計
- [筆記]物件導向的程式設計筆記物件程式設計
- (Java筆記)物件導向基礎Java筆記物件
- Golang物件導向_繼承Golang物件繼承
- 物件導向之繼承物件繼承
- java物件導向繼承Java物件繼承
- javascript:物件導向的程式設計JavaScript物件程式設計
- Javascript 物件導向程式設計(一)JavaScript物件程式設計
- Javascript 物件導向程式設計(二)JavaScript物件程式設計
- Javascript 物件導向程式設計(三)JavaScript物件程式設計
- JavaScript物件導向程式設計理解!JavaScript物件程式設計
- 物件導向之_繼承概念物件繼承
- 《JavaScript物件導向精要》之三:理解物件JavaScript物件
- JavaScript物件導向之二(建構函式繼承)JavaScript物件函式繼承
- 前端筆記之JavaScript物件導向(二)內建建構函式&相關方法|屬性|運算子&繼承&物件導向前端筆記JavaScript物件函式繼承
- Go語言結構體(struct)物件導向程式設計基礎篇Go結構體Struct物件程式設計
- 前端_JavaScript_物件導向程式設計前端JavaScript物件程式設計
- JavaScript-設計模式-物件導向程式設計JavaScript設計模式物件程式設計