ES6 学习 -- Class继承

(1)如何继承
Class可以通过extends关键字实现继承,如下:
class Father {

}

class Child extends Father {

}
// 这里子类Child继承父类Father的所有属性和方法,当然我们也可以在子类中添加自己的方法和属性。如果在子类中出现关键字super,它在这里表示父类的构造函数,用来新建父类的this对象

// 子类必须在constructor方法中调用super方法,否则构建实例时会报错,这是因为子类没有自己的this对象,必须通过父类的继承拿到this对象,然后对其进行加工,加上子类自己本身的实例属性和方法,最后才能拿到属于子类的this对象

// 子类中默认定义有constructor方法,不管有没有显示定义,任何一个子类都有constructor方法。

// 父类的静态方法也会被子类继承


(2)Object.getPrototypeOf()  // 从对象上获取属性,可以用于判断一个类是否继承于另一个类
Object.getPrototypeOf(Child) === Father; // 从子类Child上获取父类Father


(3)super关键字
super关键字,既可以当作函数使用,也可以当作对象使用
①作为函数使用时,super()代表父类的构造函数,ES6规定,子类的构造函数必须执行一次super函数,且super方法只能子类的根作用域下调用,在其他地方调用直接报错,如下
class A {}

class B extends A {
  m() {
    super(); // 报错,此时的super()是在函数m的作用域下调用的
  }
}

②super当作对象使用时,在普通方法中,super指向父类的原型对象(由于指向父类原型对象,所以父类实例调用super对象是拿不到结果的),在静态方法中,指向父类本身

原文地址:https://www.cnblogs.com/secretAngel/p/9699703.html