我想要一个基类和一个继承类。基类应提供一些常规功能,具体取决于继承类的属性。
=>如何访问基类中继承类的属性?
下面是一些用于说明问题的示例(我的问题不是如何在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”用作占位符INHERITING_CLASS,则结果不正确。
=>我如何知道ColumnType是当前继承的类,同时处于Enum类的定义范围内?
编辑
这是一个相关的问题:
Get parent class name from child with ES6?
他们的答案使用instance.constructor
。但是,在我的静态方法中,我没有实例。
答案 0 :(得分:0)
这比我想的要容易。在调用静态方法ColumnType.values()
时,值函数this
内部实际上将提供所需的Class作为上下文:
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 + '"');
}
答案 1 :(得分:-1)
除非我误解了问题,否则我认为您要寻找的是原型
ColumnType.prototype.values()