Javascript多态性:如何在(“abstract”基类的静态方法中访问继承类的静态属性?

Javascript多态性:如何在(“abstract”基类的静态方法中访问继承类的静态属性?,javascript,inheritance,Javascript,Inheritance,我想要一个基类和一个继承类。基类应该提供一些通用功能,这取决于继承类的属性 =>如何访问基类中继承类的属性 下面是一些例子来说明这个问题(我的问题不是如何在JavaScript中定义枚举。这个例子只是为了说明。) 基类示例: export default class Enum { constructor(name){ this.name = name; } } Enum.values = function(){ return Obje

我想要一个基类和一个继承类。基类应该提供一些通用功能,这取决于继承类的属性

=>如何访问基类中继承类的属性

下面是一些例子来说明这个问题(我的问题不是如何在JavaScript中定义枚举。这个例子只是为了说明。)

基类示例:

export default class Enum { 

    constructor(name){
        this.name = name;       
    }
}

Enum.values =  function(){
    return Object.values(INHERITING_CLASS);
};


Enum.forName = function(name){
    for(var enumValue of INHERITING_CLASS.values){
        if(enumValue.name === name){
            return enumValue;
        }
    }
    throw new Error('Unknown value "' + name + '"');
} 
继承类的示例:

import Enum from './enum.js';

export default class ColumnType extends Enum {  

    constructor(name, clazz){
        super(name);        
        this.associatedClass = clazz;
    }
}

ColumnType.Integer = new ColumnType('Integer', Number);
ColumnType.Double = new ColumnType('Double', Number);
ColumnType.String = new ColumnType('String', String);
我希望能够使用访问ColumnType的静态值

ColumnType.values()
其中,
values
函数由基类Enum提供。一些用于方法
forName

如果将“Enum”用于占位符继承类,则结果不正确


=>我如何知道ColumnType在枚举类定义的范围内时是当前继承的类

编辑

这是一个相关的问题:


他们的答案使用
instance.constructor
。然而,在我的静态方法中,我没有实例

我想你要的是原型,除非我误解了这个问题


ColumnType.prototype.values()

这比我想象的要简单。调用静态方法
ColumnType.values()
时,在values函数
中,此
将实际提供所需的类作为上下文:

export default class Enum { 

    constructor(name){
        this.name = name;       
    }
}

Enum.values =  function(){
    return Object.values(this);
};


Enum.forName = function(name){
    for(var enumValue of this.values){
        if(enumValue.name === name){
            return enumValue;
        }
    }
    throw new Error('Unknown value "' + name + '"');
} 

Javascript不同于传统的继承,您可能想阅读JavaScription中的原型,您能展示一下如何用Java编写它吗?您肯定会声明一个受保护的属性,其中包含子类需要覆盖的值吗?谢谢您的回复。我以为我已经在Java中这样做了,但事实证明它是不同的(非静态的)。我如何知道ColumnType是当前继承的类,而在Enum类的定义范围内?我想你可以做的一件事是调用ColumnType.prototype.values.bind(这个)然后在父实现中引用这个,尽管这可能是最干净的解决方案。函数对象上还有一个名为caller的属性。所以Function.caller可以工作。但这也是一个有点肮脏的解决方案。我以为您正在寻找从父类对象或父类访问子类属性的方法。似乎你在寻找某种形式的多态性,是这样吗?多态性这个词没有出现在我的脑海中,但你是对的。在这种情况下,你可能想重新表述线程的标题,这让我很困惑:)