javascript - 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 类,而不是直接使用原型。
解决方案
您可以使用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() 添加的值是不可变且不可枚举的。
推荐阅读
- python - 如何使用 Python 从 Google Classroom 获取作业标题
- backup - cpanel 备份 'cpbackup-exclude.conf' 排除除 .php 和 .js 之外的所有文件
- html - React Native - 样式在多个设备上不一致
- svg - 尝试在 svg 中使用 mathjax
- java - 使用 java 获取文件编码 ASCII 或 EBCDIC
- java - 如何读取杂货订单的数据并在表格中打印数据
- data-structures - 我的反转循环链表的函数有什么问题。?
- react-hooks - 如何使用 React Hooks 获取按钮单击时的数据
- laravel - 通过在 laravel 中加入两个表进行搜索
- javascript - 是否有获取用户全局系统主题的函数或变量?