Я хотел бы иметь базовый класс и класс наследования.Базовый класс должен обеспечивать некоторые общие функциональные возможности, которые зависят от свойств наследующего класса.
=> Как получить доступ к свойствам наследующего класса в базовом классе?
Ниже приведены некоторыеПример для иллюстрации вопроса (Мой вопрос не в том, как определить перечисление в 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?
Редактировать
Вот связанный вопрос:
Получить имя родительского класса от child с ES6?
Их ответ использует instance.constructor
.Однако в моем статическом методе у меня нет экземпляра.