目录
第一步
- 第一步
- 第二步
1、先创建一个额外的新的父类型,类名能够概括两种子类型的特征。 2、两种子类型间相同的属性结构,统一定义到父类型的构造函数中。 3、两种子类型间相同的方法,统一定义到父类型的原型对象中。
class Enemy { constructor(x, y) { this.x = x; this.y = y; }; fly() { console.log(`飞行到 x: ${this.x},y: ${this.y}的位置。`); }; };第二步
1、让子类型继承父类型: class 子类型 extends 父类型 { }。其实就是用 extends 关键词代替 Object.setPrototypeOf()。 2、在子类型构造函数中,用 super 调用父类型的构造函数,执行父类型构造函数中的语句,为子对象添加公共的属性。super 是子类型中,专门指向父类型中构造函数的关键词。
// 子类 Plane 通过 extends 继承父类 Enemy // extends: 扩展 class Plane extends Enemy { constructor(x, y, score) { // this.x = x; // this.y = y; // 子类通过 super 可以拿到父类中的属性和方法 super(x, y); this.score = score; }; // fly() { // console.log('飞行'); // }; getScore() { console.log(`击落一架敌机,得${this.score}分。`); }; }; var plane = new Plane(100, 50, 5); console.log(plane); // {x: 100, y: 50, score: 5} plane.fly(); // 飞行到 x: 100,y: 50的位置。 plane.getScore(); // 击落一架敌机,得5分。 // 子类 Parachute 通过 extends 继承父类 Enemy // extends: 扩展 class Parachute extends Enemy { constructor(x, y, award) { // this.x = x; // this.y = y; // 子类通过 super 可以拿到父类中的属性和方法 super(x, y); this.award = award; }; // fly() { // console.log('飞行'); // }; getAward() { console.log(`击落一把降落伞,得${this.award}分。`); }; }; var parachute = new Parachute(100, 100, 30); console.log(parachute); // {x: 100, y: 100, award: 30} parachute.fly(); // 飞行到 x: 100,y: 100的位置。 parachute.getAward(); // 击落一把降落伞,得30分。