classVehicle {} // 继承类 classBusextendsVehicle {} let b = newBus(); console.log(b instanceofBus); // true console.log(b instanceofVehicle); // true functionPerson() {} // 继承普通构造函数 classEngineerextendsPerson {} let e = newEngineer(); console.log(e instanceofEngineer); // true console.log(e instanceofPerson); // true // 派生类都会通过原型链访问到类和原型上定义的方法。this 的值会反映调用相应方法的实例或者类: classVehicle { identifyPrototype(id) { console.log(id, this); } staticidentifyClass(id) { console.log(id, this); } } classBusextendsVehicle {} let v = newVehicle(); let b = newBus(); b.identifyPrototype("bus"); // bus, Bus {} v.identifyPrototype("vehicle"); // vehicle, Vehicle {} Bus.identifyClass("bus"); // bus, class Bus {} Vehicle.identifyClass("vehicle"); // vehicle, class Vehicle {}
注意 extends 关键字也可以在类表达式中使用,因此 let Bar = class extends Foo {}是有效的语法。 2、构造函数、HomeObject 和 super(): 派生类的方法可以通过 super 关键字引用它们的原型。这个关键字只能在派生类中使用,而且仅限于类构造函数、实例方法和静态方法内部。在类构造函数中使用 super 可以调用父类构造函数。
classVehicle {} classBusextendsVehicle { constructor() { console.log(this); } } newBus(); // ReferenceError: Must call super constructor in derived class // before accessing 'this' or returning from derived constructor