从 ES6 类方法调用静态方法
在 ES6 类中,调用静态方法有两种常见的方式:通过构造函数或通过类名本身。虽然这两种方法都是有效的,但它们在重写静态方法的继承上下文中表现出不同的行为。
使用 this.constructor 引用静态属性会导致动态调度,这意味着它引用当前的类实例。这在处理重写的静态方法时很有用,如下例所示:
class Super { static whoami() { return "Super"; } } class Sub extends Super { static whoami() { return "Sub"; } } new Sub().whoami(); // "Sub"
在这种情况下,whoami 静态方法在子类中被重写。当通过 this.constructor 调用时,它引用了 Sub 类并正确返回“Sub”。
另一方面,使用类名引用静态属性可以确保不断访问原始静态方法,即使它被覆盖。例如:
class AnotherSuper { static whoami() { return "AnotherSuper"; } } class AnotherSub extends AnotherSuper { static whoami() { return "AnotherSub"; } } AnotherSub.whoami(); // "AnotherSuper"
即使在 AnotherSub 中覆盖了 whoami,通过类名(“AnotherSub”)调用它仍然返回“AnotherSuper”,因为它引用 AnotherSuper 类的静态属性。
最终,选择使用哪种方法取决于预期的行为。如果静态属性应始终引用当前类,请使用显式引用 (this.constructor)。否则,使用类名来确保对原始静态方法的持续访问。
以上是静态方法调用在具有继承和重写的 ES6 类中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!