• 326 组合继承


    组合继承实现原理

    核心:结合了原型链继承和构造函数继承两种模式的优点,传参和复用,在子类构造函数中执行父类构造函数,在子类原型上实例化父类

    缺点 内存浪费

    子类原型上有一份多余的父类实例属性,因为父类构造函数被调用了两次,生成了两份,而子类实例上的那一份屏蔽了子类原型上的

    function Parent(name) {
      this.books = ["JavaScript", "html", "css"];
      this.name = name;
      this.showBooks = function () {
        console.log(this.books);
      };
    }
    //父类声明原型共有方法
    Parent.prototype.getName = function () {
      console.log(this.name);
    };
    //声明子类
    function Child(name, time) {
      Parent.call(this, name); //call改变父类this作用于的指向,从父类拷贝一份父类的实例属性给子类作为子类的实例属性
      this.time = time;
    }
    Child.prototype = new Parent(); //创建父类实例作为子类的原型 ,此时这个父类实例就又有了一份实例属性,但这份会被第一次拷贝来的实例属性屏蔽掉
    
    Child.prototype.getTime = function () {
      console.log(this.time);
    };
    
    //在子类构造函数中执行父类构造函数,
    //在子类原型上实例化父类就是组合模式,
    //这样就融合了类式继承和构造函数的优点,
    //并且过滤掉其缺点。
    
    var fn = new Child("js book", "2018-12-14");
    fn.books.push("设计模式");
    console.dir(fn);
    console.log(fn.books); //["JavaScript", "html", "css", "设计模式"]
    fn.getName();
    fn.getTime();
    
    var fnc = new Child("css book", "2019-10-24");
    console.dir(fnc);
    console.log(fnc.books); // ["JavaScript", "html", "css"]
    fnc.getName(); //css book
    fnc.getTime(); //2019-10-24
    
  • 相关阅读:
    Linux 小知识点
    Nginx 源码安装
    MySQL user表详解
    Python 资源
    Python 迭代dict的value
    著作权和专利权的区别
    软件设计师05-信息安全基础知识
    记录一次服务器突然宕机的排查
    支付宝微信拉取账单到本地
    软件设计师04-计算机网络
  • 原文地址:https://www.cnblogs.com/ifon/p/16060848.html
Copyright © 2020-2023  润新知