首页 > 解决方案 > JavaScript 将隐藏数据添加到 Object

问题描述

假设我有一个对象,例如:

const myObj = { color: 'red', score: 8 };

我可以通过以下方式访问这些属性:

myObj.color // 'red'

和:

Object.values(myObj) // ['red', 8]

我希望能够在对象中存储额外的数据,这些数据是可访问的,但不会被Object.values()例如:

myObj.greeting // "hello"
// or alternatively
myObj.greeting() // "hello"
Object.values(myObj // ['red', 8] greeting is not picked up by Object.values()

如有必要,最好使用现代 JavaScript 类,而不是直接使用原型。

标签: javascriptobject

解决方案


您可以使用Object.defineProperty该集合enumerable: false(默认情况下),因此它不会在属性中显示/枚举:

const myObj = { color: 'red', score: 8 };
Object.defineProperty(myObj, "greeting", {
    enumerable: false,
    writable: true,
    value: "hello"
});
console.log(myObj.greeting);
console.log(myObj);
console.log(Object.values(myObj));

根据文档

此方法允许精确添加或修改对象的属性。通过赋值添加的普通属性会创建在属性枚举期间显示的属性(for...in 循环或 Object.keys 方法),其值可能会更改,也可能会被删除。此方法允许从默认值更改这些额外的详细信息。默认情况下,使用 Object.defineProperty() 添加的值是不可变且不可枚举的。


推荐阅读