bblog
bblog copied to clipboard
ES6 中 Class 的 super
class A {
constructor(a) {
this.a = a
}
}
class B extends A {
constructor(a, b) {
super(a)
this.b = b
}
}
var a = new A(a)
var b = new B(a, b)
在 ES6 中,这样的用法,我想已经总所周知了,但是super在使用的时候,我还需要知道一些它的其他特性。
在子类的构造函数中,只有调用
super()之后,才可以使用this关键字
super同时还可以看作是一个对象,这个对象是父类(用 ES5 的概念说的话,是被构造调用的函数的原型)
所以我们还可以这样使用super。
class A {
foo() {
console.log(1)
}
}
class B extends A {
bar() {
super.foo()
}
}
var b = new B()
b.bar() // 1
这样我们就可以面向委托编程,至于什么是面向委托,可以参考《你不知道的 Javascript》
更新:
(1)作为函数调用时(即
super(...args)),super代表父类的构建函数。 (2)作为对象调用时(即super.prop或super.method()),super代表父类。注意,此时super即可以引用父类实例的属性和方法,也可以引用父类的静态方法。