1. class MyClass {
  2. constructor() {
  3. // ...
  4. }
  5. get prop() {
  6. return 'getter';
  7. }
  8. set prop(value) {
  9. console.log('setter: '+value);
  10. }
  11. }

constructor(){}

一个类必须具有constructor ,会自动添加一个空的

get set

在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为

extends

通过extends关键字,继承了父类的所有属性和方法

  1. class Point {
  2. }
  3. class ColorPoint extends Point {
  4. constructor(x, y, color) {
  5. super(x, y); // 调用父类的constructor(x, y)
  6. this.color = color;
  7. }
  8. toString() {
  9. return this.color + ' ' + super.toString(); // 调用父类的toString()
  10. }
  11. }

super

子类必须在constructor方法中调用super方法,否则新建实例时会报错。因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后才能新增子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象

  • super作为函数调用时,代表父类的构造函数

    1. class A {
    2. constructor() {
    3. console.log(new.target.name);
    4. }
    5. }
    6. class B extends A {
    7. constructor() {
    8. super();
    9. }
    10. }
    11. new A() // A
    12. new B() // B
  • super作为对象时,在普通方法中,指向父类的原型对象 。并且由于指向的对象,父类的方法和属性无法继承 ```javascript class A { p() { return 2; } this.a = 2; }

class B extends A { constructor() { super(); console.log(super.p()); // 2 } get m() { return super.a; } }

let b = new B(); b.m //undefined ```