一、 舊方式javascript
function animal(){}
animal.prototype = {
getname(){ }
}
function cat(){}
cat.prototype = new animal();
複製代碼
二、新方式java
function animal(){}
animal.prototype = {
getname(){ }
}
function cat(){}
cat.prototype = Object.create(new animal());
複製代碼
可是隻能繼承一次,若是要是多繼承呢?個人想法是使用Object.assign,可是assign沒法執行深複製!若是使用getOwnPropertyDescriptors配合Object.assign能夠實現多繼承bash
function arm (){this.name="arm"}; arm.prototype={ getname(){}}
function leg (){this.name="leg"}; arm.prototype={setname(){}}
let base = {}
Object.assign(
//在原型獲取其屬性解構
{...Object.getOwnPropertyDescriptors(arm).prototype.value},
{...Object.getOwnPropertyDescriptors(leg).prototype.value},
//利用Object.getOwnPropertyDescriptors沒法獲取實例的__proto__的特性獲取構造函數內this指向參數
{...Object.getOwnPropertyDescriptors(new arm())},
{...Object.getOwnPropertyDescriptors(new leg())}
)
//繼承
function newFun(){}
newFun.prototype = base;
new newFun();//
複製代碼
這種多重的繼承最大的問題是出現重複函數名會被覆蓋,並且若是作好多重繼承應該給出錯誤提示阻止其繼承,函數