gpt4 book ai didi

javascript - 从常规 ES6 类方法调用静态方法

转载 作者:IT老高 更新时间:2023-10-28 13:17:23 33 4
gpt4 key购买 nike

调用静态方法的标准方法是什么?我可以考虑使用 constructor 或使用类本身的名称,我不喜欢后者,因为它觉得没有必要。前者是推荐的方式,还是有别的方式?

这是一个(人为的)示例:

class SomeObject {
constructor(n){
this.n = n;
}

static print(n){
console.log(n);
}

printN(){
this.constructor.print(this.n);
}
}

最佳答案

这两种方式都是可行的,但是当涉及到使用被覆盖的静态方法进行继承时,它们会做不同的事情。选择您期望的行为:

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";
}
}
new Sub().lognameA(); // Super
new Sub().lognameB(); // Sub

通过类引用静态属性实际上是静态的,并且不断给出相同的值。使用 this.constructor 将使用动态调度并引用当前实例的类,其中静态属性 可能 具有继承值,但也可以被覆盖。

这与 Python 的行为相匹配,您可以选择通过类名或实例 self 引用静态属性。

如果您希望静态属性不会被覆盖(并且始终引用当前类之一),like in Java , 使用显式引用。

关于javascript - 从常规 ES6 类方法调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28627908/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com