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() // A
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
```