javascript - Javascript多态性:如何在(“抽象”)基类的静态方法中访问继承类的静态属性?
问题描述
我想要一个基类和一个继承类。基类应该提供一些通用功能,这取决于继承类的属性。
=>如何在基类中访问继承类的属性?
下面是一些示例来说明问题(我的问题不是如何在 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
。
如果我将“枚举”用于占位符 INHERITING_CLASS,则结果不正确。
=> 在 Enum 类的定义范围内,如何知道 ColumnType 是当前继承的类?
编辑
这是一个相关的问题:
他们的答案使用instance.constructor
. 但是,在我的静态方法中,我没有实例。
解决方案
这比我想象的要容易。调用静态方法ColumnType.values()
时,在 values 函数内部this
实际上会提供所需的类作为上下文:
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 + '"');
}
推荐阅读
- websocket - 三星电视复制权限 Websocket
- android - 初始化提供程序时 Firebase 身份验证崩溃(Android)
- c# - 如何强制 Odata 使用我的自定义 DTO 对象?
- mysql - Rails has_many 基于 json 数组列
- c - Linux 库手册
- rest-assured - RestAssured:具有单个对象响应的断言 Json 响应失败,因为没有以大括号“{”或左方括号“[”开头
- c# - C# 列表
添加索引以列出控制台输出 - windows - 命令提示符颜色有问题
- python - 如何循环忽略Nan单元格的熊猫数据框?
- flutter - onLongPress 分页数据表数据行