JavaScript各种继承方式:寄生组合继承

Posted 沙滩海风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript各种继承方式:寄生组合继承相关的知识,希望对你有一定的参考价值。

 

一 原理

 

用寄生继承来改造组合继承。

 

function Fruit(name){
    this.name = name;
}

Fruit.prototype.eat = function(){
    console.log(\'eat\');
}

function Mango(name,level){
    Fruit.call(this,name);
    this.level = level;
}

function create(obj){
    let instance = Object.create(obj);
    // 对父类的实例进行了增强
    instance.desc = function(){
        console.log(\'desc\');
    };
    return instance;
}

Mango.prototype = create(Fruit.prototype); // 通过寄生拿到父类的实例,并没有调用父类的构造函数
Mango.prototype.constructor = Fruit;

let mango1 = new Mango(\'泰国芒果\',\'优\');
let mango2 = new Mango(\'海南芒果\',\'良\');

console.log(mango1);
console.log(mango2);

 

二 优点

 

具有组合继承的优点,同时只调用一次父类的构造函数,避免了内存和性能的浪费,消除了组合继承的缺点。

 

《高级程序设计》对寄生组合继承对评价:

 

 

 

Babel采用了寄生组合继承来编译class语法糖。

 

以上是关于JavaScript各种继承方式:寄生组合继承的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 组合继承 原型链继承 寄生继承

JavaScript继承基础讲解,原型链借用构造函数混合模式原型式继承寄生式继承寄生组合式继承

JavaScript-寄生组合式继承

javascript继承笔记

JavaScript继承的实现

JavaScript继承的实现