js 通过Object.defineProperty() 定义和控制对象属性

yizhihongxing

JavaScript的Object.defineProperty()方法可以用来定义和控制对象属性的访问方式。它可以让我们在对象上定义新属性,或修改已有属性的getter和setter方法。本文将全面介绍Object.defineProperty()的使用方法及其示例。

基本用法

Object.defineProperty()方法接受三个参数:要定义属性的对象,属性的名称以及一个描述符对象。描述符对象包含以下可选键值:

  • configurable:如果为 true,则该属性可以被删除,以及修改属性的特性(如修改 configurablefalse 后,再将其修改为 true 就不再允许)。若为 false,则该属性特性不可被修改,且其不能被删除;
  • enumerable:如果为 true,则该属性可以被枚举(即出现在 for...inObject.keys() 中),否则不可以;
  • value:该属性对应的值。可以是任何有效的JavaScript类型(数字,布尔型,对象等);
  • writable:如果为 true,则该属性可以修改,否则不可以(类似于常量或只读属性);
  • get:读取该属性的时候调用的函数,可以是getter函数、计算属性等,但不能与 value 同时存在;
  • set:设置该属性的值时调用的函数,可以是setter函数,但不能与 value 同时存在。

描述符对象中的每一个键值都是可选的,如果省略某个键值,那么该属性对应的特性就会被设置为默认值 false 或者 undefined

下面是一个用 Object.defineProperty() 定义一个新属性的示例:

const obj = {};
Object.defineProperty(obj, 'newProperty', {
  value: 'hello world'
});

console.log(obj.newProperty); // 输出 'hello world'

通过Object.defineProperty()控制对象属性的读写

我们可以使用 Object.defineProperty() 来控制对象某个属性的读写特性。例如,我们可以定义一个数字类型的 age 属性,通过getter和setter方法来保证其值始终在0至100之间:

const person = {
  firstName: 'John',
  lastName: 'Doe',
  _age: 20
};

Object.defineProperty(person, 'age', {

  get: function () {
    return this._age;
  },

  set: function (value) {
    if (value < 0 || value > 100) {
      throw new Error('Age must be between 0 and 100');
    }
    this._age = value;
  }
});

console.log(person.age); // 输出20
person.age = 30;
console.log(person.age); // 输出30
person.age = 110; // 会抛出一个错误

在上面的代码中,我们使用 Object.defineProperty() 方法来定义 person 对象的 age 属性,其中 getset 方法分别用于获取和设置 age 属性的值。如果设置 age 属性的值小于0或大于100,则抛出错误。

通过Object.defineProperty()将属性设置为只读

我们可以使用 Object.defineProperty() 来控制对象某个属性的只读特性。例如,以下示例将 person 对象的 firstName 属性设置为只读,我们不能通过代码来修改该属性的值:

const person = {
  firstName: 'John',
  lastName: 'Doe'
};

Object.defineProperty(person, 'firstName', {
  writable: false
});

// 不能修改 firstName 属性的值
person.firstName = 'Alice'; // 什么也不会做
console.log(person.firstName); // 输出 'John'

在上面的代码中,我们使用 Object.defineProperty() 方法来定义 person 对象的 firstName 属性,将其特性 writable 设置为 false,这意味着该属性不能被修改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 通过Object.defineProperty() 定义和控制对象属性 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统

    Bootstrap栅格系统是Bootstrap框架的一个重要组成部分,它可以帮助我们实现页面的自适应效果,让同一份代码在不同尺寸的设备上都能够呈现出良好的显示效果。下面是Bootstrap栅格系统的完整攻略: 什么是Bootstrap栅格系统 Bootstrap栅格系统由一系列的栅格列组成,每个栅格列的宽度是固定的,可以根据设备的屏幕尺寸进行自动调整。Boo…

    JavaScript 2023年6月1日
    00
  • DOM 事件的深入浅出(一)

    以下是详细讲解“DOM 事件的深入浅出(一)”的完整攻略。 什么是 DOM 事件 DOM 事件指的是由 HTML 页面中的元素触发的事件。例如,当用户在网页上点击一个按钮时,会触发相应的事件处理程序。 DOM 事件的分类 DOM 事件按照产生的顺序可以分为三种类型: 冒泡型事件(Bubbling events):从目标元素开始向外冒泡,直到传递到文档根节点。…

    JavaScript 2023年6月10日
    00
  • JavaScript的防抖和节流一起来了解下

    JavaScript的防抖和节流一起来了解下 概念介绍 防抖和节流都是为了减少某些高频率事件的触发次数。在JavaScript中常用于优化性能或者提升用户体验。 防抖(debounce)指的是一段时间内重复触发同一事件,只执行一次函数的方法。可以使用定时器实现,如下代码所示: function debounce(fn, delay) { let timer …

    JavaScript 2023年6月11日
    00
  • JavaScript DOM 对象深入了解

    JavaScript DOM 对象深入了解 DOM(文档对象模型)是 JavaScript 访问和操作网页文档的标准。这包含了网页中所有的 HTML 元素以及它们的属性和内容。操纵 DOM 对象是前端开发中必不可少的技能之一。 DOM 对象的分类 DOM 对象可以分为以下几类: Document: 整个文档对象,即为<html>标签。 Eleme…

    JavaScript 2023年5月27日
    00
  • Js 获取、判断浏览器版本信息的简单方法

    获取、判断浏览器版本信息是前端开发中常见的操作需求。接下来我将为大家讲解如何使用JavaScript实现获取、判断浏览器版本信息的简单方法。 方法一:使用navigator.userAgent字符串 每个HTTP请求(包括浏览器载入页面、图像以及框架等)都包含一个头部信息User-Agent(用户代理)。该信息通常包含浏览器类型、版本、操作系统、引擎等信息。…

    JavaScript 2023年6月11日
    00
  • JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】

    下面是JS实现获取图片大小和预览的方法完整实例攻略: 目录 需求说明 技术方案 具体实现 获取图片大小 预览图片 完整代码 总结 1. 需求说明 我们想要做一个功能,可以让用户上传图片,并且在上传图片前可以对图片进行大小预览。同时,需要能够兼容IE和其它浏览器。 2. 技术方案 我们可以使用HTML5的File API来获取图片大小和预览图片,在IE浏览器中…

    JavaScript 2023年5月28日
    00
  • springboot中thymeleaf模板使用详解

    这里是 SpringBoot 中 Thymeleaf 模板使用详解的完整攻略: 什么是Thymeleaf Thymeleaf 是一种现代化的服务器端 Java 模板引擎,可以与 Spring Boot 集成使用,支持 HTML、XML、JavaScript、CSS 甚至纯文本。模板文件可以使用包含表达式的标记替换,可以非常方便的将模型数据绑定到 HTML U…

    JavaScript 2023年6月10日
    00
  • JavaScript代码异常监控实现过程详解

    下面我将详细讲解“JavaScript代码异常监控实现过程详解”的完整攻略,包含以下内容: 什么是JavaScript代码异常监控? JavaScript代码异常监控是指对JavaScript代码运行过程中可能出现的错误进行实时捕获,并对其进行分析和追踪,以便及时发现和解决问题,保证网站的稳定性和可靠性。 实现过程 要实现JavaScript代码异常监控,主…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部