从非静态 ES6 类方法调用静态方法
使用 ES6 类时,您可能会遇到需要从以下位置访问静态方法的情况:在非静态类方法中。有两个主要选项可以实现此目的:使用构造函数或直接引用类名。虽然这两种方法在技术上都是可行的,但它们在重写静态方法的继承上下文中表现出不同的行为。
选项 1:使用构造函数
class SomeObject { constructor(n) { this.n = n; } static print(n) { console.log(n); } printN() { this.constructor.print(this.n); } }
在此例如,静态方法 print 是通过构造函数 this.constructor 访问的。这种方法可以确保调用正确的静态方法,即使扩展了类并且在子类中重写了静态方法。
选项 2:直接引用类名
class SomeObject { constructor(n) { this.n = n; } static print(n) { console.log(n); } printN() { SomeObject.print(this.n); } }
在这种情况下,静态方法 print 由其类名引用。该方法本质上是静态的,并且始终返回类中定义的原始值,无论有任何继承关系。
继承和覆盖注意事项
使用构造函数之间的选择或者在处理继承和重写的静态方法时,类名直接变得很重要,如图所示下面:
class Super { static whoami() { return "Super"; } lognameA() { console.log(Super.whoami()); } lognameB() { console.log(this.constructor.whoami()); } } class Sub extends Super { static whoami() { return "Sub"; } }
案例 1:使用 Super.whoami()
情况 2:使用 this.constructor.whoami()
这些场景中的行为可能会有所不同,具体取决于静态方法是否实际上被重写。通过类名引用静态属性提供了真正的静态行为,而使用 this.constructor 则允许动态分派和继承考虑。选择适当的方法取决于给定上下文中所需的行为。
以上是如何从非静态 ES6 类方法调用静态方法?的详细内容。更多信息请关注PHP中文网其他相关文章!