码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-12-28 18:28:03      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:ima   com   col   des   pre   console   class   http   object   

 

一 原理

 

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

 

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各种继承方式(六):寄生组合继承

标签:ima   com   col   des   pre   console   class   http   object   

原文地址:https://www.cnblogs.com/sea-breeze/p/10192051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!