当前位置:首页 > 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实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…