当前位置:首页 > JavaScript

js实现defineProperty

2026-04-06 01:31:56JavaScript

使用 Object.defineProperty 实现属性定义

Object.defineProperty 是 JavaScript 中用于直接在对象上定义新属性或修改现有属性的方法。它允许精确控制属性的行为,如可枚举性、可配置性和可写性。

语法:

Object.defineProperty(obj, prop, descriptor)
  • obj:要定义属性的对象。
  • prop:要定义或修改的属性的名称或 Symbol
  • descriptor:要定义或修改的属性描述符。

属性描述符的配置选项

属性描述符分为两种类型:数据描述符和存取描述符。两者不能混合使用。

数据描述符:

  • value:属性的值,默认为 undefined
  • writable:如果为 true,属性的值可以被修改,默认为 false
  • enumerable:如果为 true,属性会在枚举对象属性时出现,默认为 false
  • configurable:如果为 true,属性的类型可以被改变且属性可以从对象中删除,默认为 false

存取描述符:

  • get:属性的 getter 函数,默认为 undefined
  • set:属性的 setter 函数,默认为 undefined
  • enumerableconfigurable 同上。

示例代码

1. 定义普通属性

const obj = {};
Object.defineProperty(obj, 'name', {
  value: 'Alice',
  writable: true,
  enumerable: true,
  configurable: true
});
console.log(obj.name); // 输出: Alice

2. 定义不可写属性

const obj = {};
Object.defineProperty(obj, 'age', {
  value: 25,
  writable: false
});
obj.age = 30; // 静默失败,严格模式下会抛出错误
console.log(obj.age); // 输出: 25

3. 定义 getter 和 setter

const obj = {};
let _value = 0;
Object.defineProperty(obj, 'count', {
  get() {
    return _value;
  },
  set(newValue) {
    _value = newValue;
  },
  enumerable: true,
  configurable: true
});
obj.count = 10;
console.log(obj.count); // 输出: 10

4. 定义不可枚举属性

js实现defineProperty

const obj = { name: 'Bob' };
Object.defineProperty(obj, 'id', {
  value: 1,
  enumerable: false
});
console.log(Object.keys(obj)); // 输出: ['name']

注意事项

  • 如果省略描述符的某些字段,它们会默认为 falseundefined
  • 尝试修改不可配置属性的描述符会抛出错误。
  • 在严格模式下,对不可写属性赋值会抛出错误。

通过 Object.defineProperty,可以灵活地控制对象属性的行为,适用于需要精细控制属性访问和修改的场景。

分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…