从父类静态方法访问子类定义的属性 - JavaScript

3
有没有办法在javascript中创建一个带有静态方法的父类,并调用子类中定义的属性?代码示例大致如下:
class Base {
    static greet() {
        return `Hi ${username}!`
    }
} 

class ChildClass extends Base {
    username = "Jim"
} 

ChildClass.greet()

这个目前没有意义。name = "Jim"会在实例上创建属性。而静态方法则是在类本身上操作。 - Felix Kling
1个回答

4

您可以通过this访问类的属性(包括继承的属性),并且您可以像处理其他对象一样设置子类的属性:

 class Base {
   static greet() {
      return `Hi ${this.otherName}!`; // << you need this. here
   }
 } 

 class Child extends Base {  } 

  Child.otherName = "Jim"; // << there are no static properties yet, we have to replicate that behaviour

name是一个不好的属性名称,因为它与内部的function.name产生冲突...


使用这段代码,console.log(Child.greet()) 将打印出 "Hi Child!" https://codepen.io/NiuZh/pen/NWWQoYZ?editors=0011 - daalgi
我通过配置name属性Object.defineProperty(Child,'name',{writable:true,value:'Jim'})使其工作。 - daalgi
2
@David:你可能应该为这个属性选择一个不同的名称。name是函数的默认属性(而Child是一个函数)。 - Felix Kling
1
哦,那确实是个糟糕的属性名,因为它与 function.name 冲突了... - Jonas Wilms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接