zoukankan      html  css  js  c++  java
  • 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语法糖。

  • 相关阅读:
    springboot02-SpringSecurity
    java基础07- 二维数组
    java基础06-数组的使用
    逆向工程核心原理——第四章
    逆向工程核心原理——第三章
    Crackme_1_Acid_burn
    Crackme_2_Afkayas.1
    逆向工程核心原理——第二章
    MessageBox
    Python(基础)
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/10192051.html
Copyright © 2011-2022 走看看