在 ES6 中,我们可以通过 super
关键字来引用基类的方法或属性。这个关键字的使用可能与我们以前见过的一些语言中的 super
关键字有所不同,因此本文将详细介绍 ES6 中 super
关键字的用法、作用和注意事项。
1. 父类方法/属性的引用
对于继承的子类而言,super
常常用于引用父类中已经存在的方法和属性。这可以在子类中修改和扩展父类的属性及方法,并且子类可以引用父类中的属性和方法,而无需显式地指定继承层次结构。
1.1 引用父类方法
在子类中使用 super
引用父类中的方法时,可以使用 super
方法实现以下行为:
- 直接调用父类中同名的方法。
- 在子类方法中调用父类方法并传递参数。
以下是一个示例代码,可解释 super
在子类中引用父类方法的方式:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - --------- - --------------- ---- -- ---------------- - - ----- ------- ------- ------ - ----------------- ------ - ------------ -- ------------ ---- ------ ---------- - ------ - --------- - ---------------- -- ------------ ---------------- -- ----- ----------------- - - ----- ------- - --- ------------- ----- ----- ------------------ -- -- --- ---- -- ---- ---- --- -- ----- ---
在上述示例中,我们创建了父类 Person
和子类 Student
。 Person
类中定义了名为 sayName()
的方法, Student
类中覆盖了此方法,并在子类方法中调用父类方法。在这种情况下,在 Student
类中调用 sayName()
时,将执行以下操作:
- 通过
super
关键字引用父类中的sayName()
方法。 sayName()
方法输出字符串 "My name is John Doe."。- 子类方法输出字符串 "I'm in Grade 5."。
1.2 引用父类属性
在子类中使用 super
引用父类属性时,可以使用 super
方法实现以下行为:
- 直接引用父类中同名的属性。
- 在子类的构造函数中为父类属性设置新的值。
以下是一个示例代码,可解释 super
在子类中引用父类属性的方式:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - - ----- ------- ------- ------ - ----------------- ------ - ------------ -- ------------ ---- ------ ---------- - ------ --------- - ------------- ----------- -- --------- - --- ------------- - ------ ------------- -- -- ----- ---------------- - - ----- ------- - --- ------------- ----- ----- --------------------------------- -- -- ----- --- --------- -- -- ----- ---
在上述示例中,我们创建了父类 Person
和子类 Student
,并为父类属性设置了新的值。在子类方法中,我们可以通过在 super
父类中使用同名属性的方式访问该属性,并添加其他信息。
2.在 static 方法中的用法
在 static
方法中使用 super
,它其实并不是指调用父类的方法或属性,而是调用父类的 static
方法或属性。
以下是示例代码,可解释在 static
方法中使用 super
的方式:
-- -------------------- ---- ------- ----- ------ - ------ -------------- - ------ --------- - - ----- ------- ------- ------ - ------ -------------- - ------ ------------------------ ----------- - - ------------------------------------ -- -- ------- ----------
在上述示例中,我们创建了一个父类和一个静态子类。在 Student
类中,我们定义了一个 static
方法 getClassName()
并重写它。我们使用 super.getClassName()
调用了 Person
类的静态 getClassName()
方法,并添加了一个后缀 (Student)
。
3.注意事项
super
关键字必须在子类构造函数中先调用super()
方法,然后才能使用它来引用父类方法或属性。这保证了在任何子类方法之前都没有访问到this
属性。- 在在静态方法中使用
super
时,super
指的是父类,而不是父类实例。 - 在箭头函数中使用
super
不可行,因为箭头函数无法创建this
作用域。
4.结论
在 ES6 中, super
关键字常常用于在子类中覆盖和调用父类中的方法和属性。这可以很好地扩展父类,以满足子类的需求。super
在使用中也需要注意其相关的作用和注意事项。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d304fa336082f254a049e