
Object.defineProperties() 是 JavaScript 中用于一次性定义或修改多个对象属性的静态方法,比逐个调用 Object.defineProperty() 更简洁高效。
基本语法与参数结构
该方法接收两个参数:
目标对象(要操作的对象) 描述符对象(键为属性名,值为对应的属性描述符)
示例:
const obj = {};Object.defineProperties(obj, { name: { value: ‘Alice’, writable: false, enumerable: true }, age: { value: 30, writable: true, configurable: false }, toString: { value: function() { return `${this.name} (${this.age})`; }, enumerable: false, writable: true }});
属性描述符的类型区分
每个属性描述符必须是“数据描述符”或“存取描述符”之一,不能混用:
立即学习“Java免费学习笔记(深入)”;
数据描述符:含 value 和 writable(如普通值属性) 存取描述符:含 get 和/或 set(如计算属性或拦截访问)
注意:configurable 和 enumerable 在两类中都可共用。
常见使用场景
创建不可枚举、只读的配置对象(如常量集合) 批量冻结部分属性,同时保留其他属性可写 为已有对象添加 getter/setter,实现响应式逻辑雏形(如简易数据绑定) 封装私有属性模拟(配合闭包或 Symbol,再用 defineProperties 暴露受控接口)
注意事项与陷阱
若目标对象不可扩展(Object.preventExtensions()),新增属性会静默失败(非严格模式)或抛错(严格模式) 已存在属性若 configurable: false,则不能修改其描述符类型(比如从数据描述符改为存取描述符) 所有属性默认 configurable、enumerable、writable 均为 false,不显式声明即不可改、不可遍历、不可赋值

评论(0)