JS 继承(四)-- 组合继承优化

发布日期:2019-07-05 阅读量:451

优化1:

   将子类原型直接指向父类原型;

缺点:

   当子类原型的构造函数修改指向时,父类的构造函数也会随之改变。不能判断子类实例的直接构造函数(到底是子类构造函数还是父类构造函数)

    /**
    * 父类构造函数
    * name 基础属性
    * hobby 引用属性
    * say 引用类型functio
    * happy 原型方法
    */
   function Parent(name) {
       this.name = name;
       this.hobby = ['basketball', 'ping-pang', 'reading'];
       this.say = function() {
           console.log('parent say');
       }
   }
   Parent.prototype.happy = function() {
       console.log('go to happy');
   }
   /**
    * 子类构造函数
    */
   function Child(name, age) {
       Parent.call(this, name);
       this.age = age;
   }
   
   Child.prototype = Parent.prototype; // @@核心修改@@
   Child.prototype.constructor = Child;
   console.log(Child.prototype.constructor); // function Child
   console.log(Parent.prototype.constructor); // function Child

优化2:完美继承

   /**
    * 父类构造函数
    * name 基础属性
    * hobby 引用属性
    * say 引用类型functio
    * happy 原型方法
    */
   function Parent(name) {
       this.name = name;
       this.hobby = ['basketball', 'ping-pang', 'reading'];
       this.say = function() {
           console.log('parent say');
       }
   }
   Parent.prototype.happy = function() {
       console.log('go to happy');
   }
   /**
    * 子类构造函数
    */
   function Child(name, age) {
       Parent.call(this, name);
       this.age = age;
   }
   
   Child.prototype = Object.create(Parent.prototype); // @@核心修改@@
   Child.prototype.constructor = Child;