继承

分为属性和方法的继承

 

组合继承:原型链继承+构造函数继承

  使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,即通过在原型上定义方法实现了函数复用,又保证了每个实例都有它自己的属性。

1
2
3
4
5
6
7
function Parent(age){
   this .name = [ 'mike' , 'jack' , 'smith' ];
   this .age = age;
}
Parent.prototype.run = function () {
   return  this .name +  ' are both'  this .age;
};

function Child(age){

  Parent.call(this,age);

}

Child.prototype = new Parent();

缺点:调用2次父类的构造函数

  

原型式继承

  借助原型并基于已有的对象创建新对象,同时还不用创建自定义类型。

1
2
3
4
5
function obj(o){
  function F(){}
  F.prototype = o;
   return  new  F();
}

  

寄生式继承

  把原型式+工厂模式结合起来,目的是为了封装创建的过程

1
2
3
4
5
6
7
8
9
<script>
   function  create(o){
     var  f= obj(o);
    f.run =  function  () {
       return  this .arr; //同样,会共享引用
    };
   return  f;
  }
</script>

  

寄生组合继承

  通过借用构造函数来继承属性,通过原型链的混成方式来继承方法。

  基本思路:不必为了指定子类的原型而调用超类型的构造函数。本质上,使用寄生式继承来继承超类型的原型,然后再将结果指定给子类型的原型。

1
2
3
4
5
6
7
8
9
10
11
function  object(o) {
     function  F() {}
     F.prototype = o;
     return  new  F();
}
 
function  inheritPrototype(subType, superType) {
     var  prototype = object(superType.prototype);   //创建对象
     prototype.constructor = subType;               //增强对象
     subType.prototype = prototype;                 //指定对象
}

  

 

转载于:https://www.cnblogs.com/xfcao/p/9999114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值