美文网首页
JS寄生组合式继承

JS寄生组合式继承

作者: 开始懂了_317 | 来源:发表于2017-04-21 19:11 被阅读0次

    JS的继承方式有很多种,最理想的继承方式是寄生组合式继承。
    组合继承(构造函数和原型的组合)会调用两次父类构造函数的代码,

    function Person(name){
      this.name=name;
    }
    Person.prototype.sayName=function(){
      console.log(this.name+' '+this.gender+' '+this.age);
    }
    function Female(name,gender,age){
      Person.call(this,name);//第一次调用父类构造函数             
      this.age=age;
      this.gender=gender;
    }
    Female.prototype=new Person();//第一次调用父类构造函数
    Female.prototype.constrcutor=Female;//因重写原型而失去constructor属性,所以要对constrcutor重新赋值
    
    

    因此引入寄生组合式继承,即通过借用构造函数来继承属性,通过原型链的方式来继承方法,而不需要为子类指定原型而调用父类的构造函数,我们需要拿到的仅仅是父类原型的一个副本。因此可以通过传入子类和父类的构造函数作为参数,首先创建父类原型的一个复本,并为其添加constrcutor,最后赋给子类的原型。这样避免了调用两次父类的构造函数,为其创建多余的属性。

    function inheritPrototype(Female,Person){ 
      var protoType=Object.create(Person.prototype);
      protoType.constructor=Female;
      Female.prototype=protoType;
    }
    //取代
    //Female.prototype=new Person();
    //Female.prototype.constrcutor=Female
    
    inheritPrototype(Female,Person);
    Female.prototype.sayAge=function(){
    console.log(this.name+' '+this.age);
    }
     var fm=new Female('skila','female',19);
     fm.sayName();//skila female 19
     fm.sayAge();skila  19
    

    相关文章

      网友评论

          本文标题:JS寄生组合式继承

          本文链接:https://www.haomeiwen.com/subject/zjfjzttx.html