#什么是面向對象的繼承

繼承:子類不影響父類,子類可以繼承父類的一些功能 ( 代碼復用 )
屬性的繼承:調用父類的構造函數 call
方法的繼承:CreateStar.prototype = CreatePerson.prototype
```
function CreatePerson(name, sex){ // 父類
this.name = name;
this.sex = sex;
}
CreatePerson.prototype.showName = function(){
alert(this.name);
};
var p1 = new CreatePerson('小明', '男');
p1.showName(); // 小明
function CreateStar(name, sex, job){ // 子類
CreatePerson.call(this, name, sex);
this.job = job;
}
CreateStar.prototype = CreatePerson.prototype;
var p2 = new CreateStar('黃曉明', '男', '演員');
p2.showName(); // 黃曉明
```
方法的繼承現在采用的是:CreateStar.prototype = CreatePerson.prototype,這是引用賦值,這就導致當給子類新增一個方法的時候會影響到父類,比如:
```
function CreatePerson(name, sex){ // 父類
this.name = name;
this.sex = sex;
}
CreatePerson.prototype.showName = function(){
alert(this.name);
};
var p1 = new CreatePerson('Mary', '女');
p1.showName(); // 小明
function CreateStar(name, sex, job){ // 子類
CreatePerson.call(this, name, sex);
this.job = job;
}
CreateStar.prototype = CreatePerson.prototype;
CreateStar.prototype.showSex = function(){
alert(this.sex);
};
var p2 = new CreateStar('黃曉明', '男', '演員');
p2.showName(); // 黃曉明
p1.showSex(); // 女 這里就說明影響到父類了
p2.showSex(); // 男
```
解決方法:請看下一節《面向對象之拷貝繼承》
- 01 JS面向對象及組件開發
- 02 傳統的過程式編寫選項卡
- 03 用面向對象封裝通用選項卡
- 04 控制多個選項卡自動播放
- 05 用面向對象編寫拖拽
- 06 JS面向對象及組件開發
- 07 hasOwnProperty和constructor的使用
- 08 instanceof運算符的使用
- 09 利用toString做類型判斷
- 10 什么是面向對象的繼承
- 11 面向對象之拷貝繼承
- 12 編寫繼承的拖拽
- 13 繼承的其他形式之類式繼承
- 14 繼承的其他形式之原型繼承
- 15 組件開發是什么
- 16 給拖拽組件配置不同參數
- 17 封裝彈框組件
- 18 使用對象標記已彈出彈框
- 19 復雜組件開發之自定義事件
- 20 原生JS實現自定義事件
- 21 自定義事件實例
- 22 基于JQ的選項卡組件開發