假设我有一个具有公共(public)属性的类,只有一个 get
访问器。我希望能够循环遍历对象键来处理对象。
class Foo {
get bar() {
return 'barval';
}
}
当我调用 Object.keys(...)
(或类似函数)或循环访问对象中的键时,为什么 bar
不可见? foo.bar
在请求时成功返回 barval
,但 Object.keys(foo)
当我期望它返回 时返回一个空数组[“栏”]
。这是为什么?
示例输出:
const foo = new Foo();
console.log(foo.bar, // barval
Object.keys(foo), // []
Object.entries(foo), // []
Object.values(foo)); // []
for (let key in foo)
console.log(key, foo[key]); // Never reached
最佳答案
类 getter 和 setter 不是类实例的属性,因此它们在键
、条目
或值
中不可用。
它们是对象原型(prototype)的成员。您可以迭代原型(prototype),然后删除诸如构造函数之类的内容,只留下您在类中声明的内容。
据我所知,执行此操作的唯一方法是:
class Foo {
get bar() {
return 'barval';
}
}
const foo = new Foo();
for (const prop of Object.getOwnPropertyNames(Object.getPrototypeOf(foo))) {
console.log(prop);
}
返回:
constructor
bar
关于具有 `get` 访问器的 JavaScript 对象属性不在 Object.keys() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74845024/