首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript多态性:如何在“抽象”基类的静态方法中访问继承类的静态属性?

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

Stack Overflow用户
提问于 2019-03-13 12:17:07
回答 2查看 79关注 0票数 1

我希望有一个基类和一个继承类。基类应该提供一些一般功能,这取决于继承类的属性。

=>How可以访问基类中继承类的属性吗?

下面是一些例子来说明这个问题(我的问题不是如何在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 + '"');
} 

示例继承类:

代码语言:javascript
复制
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的静态值

代码语言:javascript
复制
ColumnType.values()

其中values函数由基类Enum提供。一些用于方法forName

如果我对占位符INHERITING_CLASS使用"Enum“,结果是不正确的。

=>,我如何知道在Enum类的定义范围内,ColumnType是当前继承的类?

编辑

以下是一个相关的问题:

Get parent class name from child with ES6?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-13 12:46:34

这比我想象的要容易。当调用静态方法ColumnType.values()时,this函数中的值实际上将提供想要的类作为上下文:

代码语言:javascript
复制
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 + '"');
} 
票数 0
EN

Stack Overflow用户

发布于 2019-03-13 12:20:16

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

ColumnType.prototype.values()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55141718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档