首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript使对象字符串键可枚举

Javascript使对象字符串键可枚举
EN

Stack Overflow用户
提问于 2022-05-16 16:38:01
回答 2查看 56关注 0票数 1

我有一个用字符串键设置的类,如下所示:

代码语言:javascript
运行
复制
class MyClass {
    constructor() {
        this.id = 0
        this.data = []
    }

    "GET /data"(req, res) {
        res.json(this.data)
    }
}

我们的目标是动态循环如下所示的实例中的函数:

代码语言:javascript
运行
复制
for (let key in new MyClass()) {
    console.log(key)
}

然而,我所做的一切都只导致了键iddata

我可以手动获取函数并运行它,非常好:

代码语言:javascript
运行
复制
let item = new MyClass()
item["GET /data"]()

但是它没有出现在我尝试过的任何动态枚举中。

手动设置枚举也有效:

代码语言:javascript
运行
复制
class MyClass {
    constructor() {
        this.id = 0
        this.data = []
        
        // Here!!!
        Object.defineProperty(this, "GET /data", {
            value: this["GET /data"],
            writable: false,
            enumerable: true,
            configurable: true
        })
    }

    "GET /data"(req, res) {
        res.json(this.data)
    }
}

console.log(Object.keys(new MyClass())) // ["id", "data", "GET /data"]

但这违背了动态地做这件事的目的。是否有任何方法可以动态获取带有字符串键的函数的名称,或者使每个属性都可枚举?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-16 16:45:21

代码语言:javascript
运行
复制
Object.getOwnPropertyNames(MyClass.prototype)

给你

代码语言:javascript
运行
复制
["constructor", "GET /data"]
票数 1
EN

Stack Overflow用户

发布于 2022-05-16 16:40:59

有两种方法可以做到这一点

代码语言:javascript
运行
复制
Object.keys(myObj)

代码语言:javascript
运行
复制
for (let key in myObj) {
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72262658

复制
相关文章

相似问题

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