ES6新增继承方法

210 阅读1分钟

extends:使用该关键字就可以继承任何拥有([Construct])和原型的对象

//继承类
    class Vehicle{}
    class Bus extends vehicle{}
    let b = new Bus();
    console.log(b instanceof Bus);//true
    console.log(b instanceof Vehicle);//true
//继承普通构造函数
    function Person(){}
    class Engineer extends Person{}
    let e = new Engineer();
    console.log(e instanceof Engineer);//true
    console.log(e instanceof Person);//true

super:派生类通过super关键字引用原型,使用时需要注意以下几点

  1. 只能在派生类构造函数和静态方法中使用
class Vehicle{
    constructor(){
        super();//SyntaxError: 'super' keyword unexpected
    }
}
  1. 不能单独引用关键字,要么用它调用构造函数,要么引用静态方法
class Vehicle{}
class Bus extends Vehicle{
    constructor(){
        console.log(super);//SyntaxError: 'super' keyword unexpected here
    }
}
  1. 调用super()会调用父类构造函数,并将实例赋值给this
class Vehicle{}
class Bus extends Vehicle{
    constructor(){
        super();
        console.log(this instanceof Vehicle);
    }
}
new Bus();//true
  1. 在类构造函数中,不能在调用super()之前引用this
class Vehicle{}
class Bus extends Vehicle{
    constructor(){
        console.log(this);
    }
}
new Bus();//ReferenceError:Must call super constructor in derived class
          // before accessing 'this' or returning from derived constructor
  1. 如果派生类中显式定义了构造函数,则要么必须在其中调用super(),要么在其中返回一个对象
class Vehicle{}
class Car extends Vehicle{}
class Bus extends Vehicle{
    constructor(){
        super();
    }
}
class Van extends Vehicle{
    constructor(){
        return {};
    }
}
console.log(new Car());//Car{}
console.log(new Bus());//Bus{}
console.log(new Van());//{}