资源说明:深入浅析ES6 Class 中的 super 关键字
ES6 中的 Class 引入了一个新的关键字 super,这个关键字可以作为函数使用,也可以作为对象使用。在本文中,我们将深入浅析 ES6 Class 中的 super 关键字,了解其用法和特点。
一、作为函数使用
在 ES6 中,当我们使用 extends 关键字继承另一个类时,子类的构造函数必须执行一次 super 函数。这是因为父类的构造函数需要被执行,以便正确地初始化子类的实例。例如:
```
class A {}
class B extends A {
constructor() {
super(); // ES6 要求,子类的构造函数必须执行一次super函数。
}
}
```
在上面的代码中,super() 代表了父类 A 的构造函数,但是返回的是子类 B 的实例,即 super 内部的 this 指的是 B,因此 super() 在这里相当于 A.prototype.constructor.call(this)。
二、作为对象使用
在普通方法中,super 指向父类的原型对象;在静态方法中,super 指向父类。例如:
```
class A {
c() {
return 2;
}
}
class B extends A {
constructor() {
super();
console.log(super.c()); // 2
}
}
let b = new B();
```
在上面的代码中,子类 B 当中的 super.c(),就是将 super 当作一个对象使用。这时,super 在普通方法之中,指向 A.prototype,所以 super.c() 就相当于 A.prototype.c()。
需要注意的是,通过 super 调用父类的方法时,super 会绑定子类的 this。这意味着,如果我们通过 super 对某个属性赋值,这时 super 就是 this,赋值的属性会变成子类实例的属性。
三、使用 super 的注意事项
使用 super 时,必须显式指定是作为函数使用,还是作为对象使用,否则会报错。例如:
```
class A {}
class B extends A {
constructor() {
super();
console.log(super); // 报错
}
}
```
在上面的代码中,console.log(super) 当中的 super,无法看出是作为函数使用,还是作为对象使用,所以 JavaScript 引擎解析代码的时候就会报错。
四、总结
在 ES6 中,super 关键字是一个非常重要的概念,它可以作为函数使用,也可以作为对象使用。使用 super 时,需要注意其用法和特点,以免出现错误。在实践中,super 可以帮助我们更好地继承和使用父类的方法和属性。
本文对 ES6 Class 中的 super 关键字进行了详细的介绍,希望能够对读者有所帮助。如果您有任何疑问,请随时留言。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。