深入浅析ES6 Class 中的 super 关键字
文件大小: 49k
源码售价: 10 个金币 积分规则     积分充值
资源说明:深入浅析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 关键字进行了详细的介绍,希望能够对读者有所帮助。如果您有任何疑问,请随时留言。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。