Open lishengzxc opened 8 years ago
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
在子类的构造函数中,只有调用super()之后,才可以使用this关键字 super同时还可以看作是一个对象,这个对象是父类(用 ES5 的概念说的话,是被构造调用的函数的原型)
在子类的构造函数中,只有调用super()之后,才可以使用this关键字
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即可以引用父类实例的属性和方法,也可以引用父类的静态方法。
super(...args)
super.prop
super.method()
在 ES6 中,这样的用法,我想已经总所周知了,但是
super
在使用的时候,我还需要知道一些它的其他特性。所以我们还可以这样使用
super
。这样我们就可以面向委托编程,至于什么是面向委托,可以参考《你不知道的 Javascript》
更新: