ES6中的继承

在学习ES6中的继承之前 我们先来了解一下类(class)

  • class 是 ES6新增的一个关键字。
   如果你学习过其他的编程语言,你就会发现,js是没有类这个概念的。 随着js的发展,class终于在ES6时添加到js中。 

    基本上,ES6的class可以看到是一个语法糖。 本质上就是一个构造函数。

es6之前的构造函数写法。

  function Cat(name,color){
      this.name = name;
      this.color = color;
    }
    Cat.prototype.eat = function(){
      console.log("吃老鼠");
    }

es6之后的写法

  class Cat{
      // 构造器:之前构造函数中的代码放在这里。
      constructor(name,color){
        this.name = name;
        this.color = color;
      }
      // 在这里定义的方法就会在原型对象上、
      eat(){
        console.log("吃老鼠");
      }
    }

    var c1 = new Cat("大毛","灰色");

    console.log(c1);

    console.log(Cat.prototype.constructor);

那么前面我们已经了解过class的概念了 那么我们来聊聊es6之后的继承吧
ES6实现继承: 使用extends和super关键字。

  • 实现继承的步骤 constructor必须要有
    1.在子类的类名后 添加 extends 父类名
    2.在子类的构造器中,调用super() 相当于调用父类的构造器。
   class Son extends Father{
      constructor(){
        super();
      }
    }

示例

//定义一个动物类
 class Animal{
      constructor(type){
        // 动物品类
        this.type = type;
      }
      //定义一个睡得方法
      sleep(){
        console.log("睡一觉");
      }
    }
  //用一个extends关键字实现子类继承父类的属性
    class Dog extends Animal{
      constructor(name,age){
        //相当于调用父类的构造器
        super("犬科哺乳动物")
        this.name = name;
        this.age = age;
      }
      //定义一个吃的方法
      eat(){
        console.log(this.name+"吃大骨头");
      }
    }

    var hsq = new Dog("二哈",3);
    console.log(hsq);
    // console.log(hsq.name);
    // console.log(hsq.age);
    // hsq.eat();
    // console.log(hsq.type);
    hsq.sleep();

super:

  • 可以当做函数来使用

  • 也可以当做对象来使用

当函数来使用:
代表父类的构造函数
【注意】只能在子类的构造器中使用。
【注意】要实现继承,super不能省略

当对象来调用
代表父类的原型对象

**示例**
 class Animal{
      constructor(type){
        // 动物品类
        this.type = type;
      }
      sleep(){
        console.log("睡一觉");
      }
    }

    class Dog extends Animal{
      constructor(name,age){
        //相当于调用父类的构造器
        super("犬科哺乳动物")
        this.name = name;
        this.age = age;
      }
      eat(){
        console.log("吃大骨头");
        // console.log(super.type);//undefined  原因是type并没有存在于Animal原型对象上,在animal实例对象中。
        super.sleep();
        // super("犬科哺乳动物");
      }
    }

    var d = new Dog("二哈",3)
    d.eat();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值