在 JavaScript 中,Object.defineProperty() 和 Object.defineProperties() 可动态修改属性描述符,但前提是 configurable 为 true;若 configurable: false,则仅允许将 writable 从 true 改为 false,其他修改会静默失败或抛出 TypeError。
在 JavaScript 中,可以通过 Object.defineProperty() 或 Object.defineProperties() 动态修改已存在属性的描述符,但前提是该属性的 configurable 描述符为 true。如果 configurable: false,则大部分描述符(如 writable、enumerable、configurable 本身)将无法被修改,仅允许在 writable: true 时把 writable 改为 false。
修改前应先检查属性的当前描述符,尤其是 configurable 值:
const obj = { a: 1 };console.log(Object.getOwnPropertyDescriptor(obj, 'a'));// { value: 1, writable: true, enumerable: true, configurable: true }
若返回的描述符中 configurable: false,说明该属性已被锁定,后续只能降级 writable(从 true → false),其他修改会静默失败(非严格模式)或抛出 TypeError(严格模式)。
即使属性已存在,只要满足可配置条件,即可覆盖部分描述符:
立即学习“Java免费学习笔记(深入)”;
writable: false
for...in 遍历:设置 enumerable: false
configurable: false(注意:此操作不可逆)示例:
const obj = { x: 42 };Object.defineProperty(obj, 'x', { writable: false, enumerable: false});// 此时 x 仍可读,但不能改值、不会被遍历,且不能再被 defineProperty 修改(因 configurable 默认为 false)
用 Object.defineProperties() 可一次性更新多个已有属性的描述符:
const obj = { a: 1, b: 2, c: 3 };Object.defineProperties(obj, { a: { writable: false }, b: { enumerable: false }, c: { configurable: false }});
注意:每个子描述符对象只需提供要修改的字段,未指定的字段保持原值(但前提是 configurable: true)。
configurable: false 后,不能再通过 defineProperty 改变 value 或 set/get(除非先设 writable: true,再改 value)writable: false 改回 true 会失败(无论 configurable 是否为 true)get/set 访问器时,必须同时省略 value 和 writable,否则报错Object.getPrototypeOf(obj)),再对其操作Flowchart2Mermaid 如何结合文本、拖拽和自然语言命令编辑流程图?
ubnutu桌面环境Gnome配置tweak tool时看不到extension插件选项
AI Flowchart Studio 如何从文本生成 Mermaid 图并导出 SVG、PNG 或源码?
SAGE 如何通过提示词编辑 Draw.io 和 Mermaid 软件工程图?
AI 流程图工具如何实现无需登录的对话生成、源码编辑和实时预览?
EaseChart Mermaid AI 如何从文本提示生成可编辑图表?