Javascript 使对象字符串键可枚举
Javascript make object string keys enumerable
我有一个 class 设置了字符串键,如下所示:
class MyClass {
constructor() {
this.id = 0
this.data = []
}
"GET /data"(req, res) {
res.json(this.data)
}
}
目标是在这样的实例中动态循环函数:
for (let key in new MyClass()) {
console.log(key)
}
然而,我尝试过的一切都只得到了键 id
和 data
。
我可以手动获取函数,运行 就好了:
let item = new MyClass()
item["GET /data"]()
但它没有出现在我尝试过的任何动态枚举中。
手动设置枚举也有效:
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"]
但这违背了动态执行的目的。有什么方法可以动态获取带有字符串键的函数名称,或者使每个 属性 可枚举?
有两种方法可以做到这一点
Object.keys(myObj)
或
for (let key in myObj) {
}
Object.getOwnPropertyNames(MyClass.prototype)
给你
["constructor", "GET /data"]
我有一个 class 设置了字符串键,如下所示:
class MyClass {
constructor() {
this.id = 0
this.data = []
}
"GET /data"(req, res) {
res.json(this.data)
}
}
目标是在这样的实例中动态循环函数:
for (let key in new MyClass()) {
console.log(key)
}
然而,我尝试过的一切都只得到了键 id
和 data
。
我可以手动获取函数,运行 就好了:
let item = new MyClass()
item["GET /data"]()
但它没有出现在我尝试过的任何动态枚举中。
手动设置枚举也有效:
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"]
但这违背了动态执行的目的。有什么方法可以动态获取带有字符串键的函数名称,或者使每个 属性 可枚举?
有两种方法可以做到这一点
Object.keys(myObj)
或
for (let key in myObj) {
}
Object.getOwnPropertyNames(MyClass.prototype)
给你
["constructor", "GET /data"]