class MyClass {constructor() {// ...}get prop() {return 'getter';}set prop(value) {console.log('setter: '+value);}}
constructor(){}
一个类必须具有constructor ,会自动添加一个空的
get set
在“类”的内部可以使用get和set关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为
extends
通过extends关键字,继承了父类的所有属性和方法
class Point {}class ColorPoint extends Point {constructor(x, y, color) {super(x, y); // 调用父类的constructor(x, y)this.color = color;}toString() {return this.color + ' ' + super.toString(); // 调用父类的toString()}}
super
子类必须在constructor方法中调用super方法,否则新建实例时会报错。因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后才能新增子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象
super作为函数调用时,代表父类的构造函数
class A {constructor() {console.log(new.target.name);}}class B extends A {constructor() {super();}}new A() // Anew 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
```
