JS的继承

ES5的继承

原型链继承

  //父类
  function Father() {
    this.name = 'abc'
    this.age = 10
    this.hobby =['篮球','足球','乒乓球']
  }
  //子类
  function Son() {
  }
  Son.prototype = new Father()
  var obj = new Son()
  var obj1 = new Son()
  obj1.name = 'cba'
  obj1.hobby.push('网球')
  console.log(obj.name)
  console.log(obj.age)
  console.log(obj.hobby)
  console.log(obj1.name)
  console.log(obj1.age)
  console.log(obj1.hobby)

 原理:将需要继承的父类充当子类的原型对象来进行调用

优点:简单方便,操作简单

缺点:1.不能传递父类的参数

           2.子类的原型对象(所继承的父类)中的引用属性(引用数据类型)是共享的。在上述代码中,在父类的hobby为一个数组对象,可以看见我们创建出obj,obj1两个对象,只修改obj1中的hobby,obj也会随之改变.

构造函数继承

  // 父类
  function Father(name,age) {
    this.name = name
    this.age = age
    this.hobby =['篮球','足球','乒乓球']
  }
  //子类
  function Son(name,age) {
    Father.call(this,name,age)
  }
  var obj =new Son('abc',10)
  var obj1 =new Son('cba',20)
  console.log(obj.name)
  console.log(obj.age)
  console.log(obj1.name)
  console.log(obj1.age)
  console.log(obj1.hobby === obj.hobby)

 原理:借用父类的构造函数来增强子类实例,等于是把父类的实例属性复制一份给子类实例装上

优点:1.可以传递父类的参数

           2可以实现多个父类的继承

缺点:1.不能继承父类上的原型方法

           2.每个创建的子类都是一个新的函数,内存消耗极大

组合继承

 // 父类
  function Father(name,age) {
    this.name = name
    this.age = age
    this.hobby =['篮球','足球','乒乓球']
    Father.prototype.sex = function () {
      console.log('男')
    }
  }
  //子类
  function Son(name,age) {
    Father.call(this,name,age)
  }
  Son.prototype = new Father()
  Son.prototype.constructor = Son
  var obj =new Son('abc',10)
  obj.sex()

.

 

原理:将原型链继承和构造函数继承相结合

优点:比较完美

缺点:1.操作复杂

           2.调用了2次父类

ES6继承

extends关键字继承

  class Father{
    constructor(name,age) {
      this.name =name
      this.age = age
    }
    sex(){
      console.log('男')
    }
  }
  class Son extends Father{
    constructor(name,age) {
      super(name,age);
    }
  }
  obj =new Son('abc',30)
  console.log(obj.name)
  console.log(obj.age)
  obj.sex()

 原理通过extends关键字来继承父类,子类可以继承父类的属性和方法,子类必须在constructor方法中调用super()方法来实现,因为新建的子类是没有自己的this对象,而是继承了父类的this对象

ES5继承与ES6继承的区别

es5的继承实质是先创建子类的实质对象this,然后再把父类的方法添加到子类的this上

es6的继承是先把父类实例对象的属性和方法添加到this上,然后再用子类的构造函数去修改this

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值