js继承

什么是继承

一个(函数)可以重用另另一个(函数)的属性和方法

1.原型链继承

function SuperType() {
    this.property = true;
}

SuperType.prototype.getSuperValue = function() {
    return this.property;
}

function SubType() {
    this.subproperty = false;
}

// 这里是关键,创建SuperType的实例,并将该实例赋值给SubType.prototype
SubType.prototype = new SuperType(); 

SubType.prototype.getSubValue = function() {
    return this.subproperty;
}

var instance = new SubType();
console.log(instance.getSuperValue()); // true

缺点

  1. 子类多个实例的__proto__属性都是指向同一个对象
  2. 无法继承父类的静态方法

2.寄生组合

function Parent() {
  this.favorite = [1]

function Child() {
  Parent.call(this) // 继承父类的--属性,
  this.age = 18

Child.prototype = Object.create(Parent.prototype) // 继承父类的原型属性
Object.setPrototypeOf(Child, Parent) // 继承父类的---静态方法(方法共享没事)
Child.prototype.constructor = Child // constructor 重新指向 Child

ES6原生写法

 

function _inherits(subType, superType) { 
  // 创建对象,创建父类原型的一个副本
  // 增强对象,弥补因重写原型而失去的默认的constructor 属性
  // 指定对象,将新创建的对象赋值给子类的原型
  subType.prototype = Object.create(superType && superType.prototype, {
      constructor: {
          value: subType, // 值
          writable: true, // 可以改变值,默认是不可以改变
          enumerable: false, // 该属性不会出现在对象的枚举属性中。
          configurable: true // 该属性的描述符可以改变,同时该属性也能从对应的对象上被删除。
      }
  });
  
  if (superType) {
      Object.setPrototypeOf 
          ? Object.setPrototypeOf(subType, superType) 
          : subType.__proto__ = superType;
  }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值