javascript中object-defineproperties批量设置属性

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,不显式声明即不可改、不可遍历、不可赋值

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。