具有 `get` 访问器的 JavaScript 对象属性不在 Object.keys() 中

标签 javascript key

假设我有一个具有公共(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/

相关文章:

dictionary - 字典中键的 Pythonic 简写?

javascript - 父 Assets 类型上的 getAssetRegistry 在 hyperledger-composer 事务中失败

javascript - 无法将用户存储在 Express.js session 中

javascript - cordova-plugin-screen-orientation 不适用于特定页面

javascript - 重命名 json 键迭代

c# - Dictionary Keys 有字数限制吗?

javascript - 导出到 csv 时忽略 JSON 字符串中的逗号

MySQL - 无法添加外键

mysql - MySQL 中的错误代码 1022

mysql - 错误: Error 1215: Cannot add foreign key constraint even when both fields are of the same type