深入解析JavaScript 中的 Object.defineProperty() 与 Object.defineProperties() 方法

目录

  • 前言
  • 1. Object.defineProperty()
  • 2. Object.defineProperties()

前言

写在前面,基本的功能与差异如下:

  • Object.defineProperty()
    定义单个属性,接受三个参数(对象、属性名、描述符)

  • Object.defineProperties()
    定义多个属性,接受两个参数(对象、包含多个描述符的对象)

1. Object.defineProperty()

Object.defineProperty() 是一个用于定义对象属性的静态方法,允许你精确地添加或修改对象的属性,包括它们的特性,如可写性、可枚举性和可配置性

基本的语法如下:

Object.defineProperty(obj, prop, descriptor)

属性如下:

  • obj:要在其上定义属性的对象
  • prop:要定义或修改的属性的名称
  • descriptor:描述符对象,定义属性的特性

对于表述的对象有很多种用法,具体如下:

属性描述
value属性的值(默认为 undefined)
writable如果设置为 true,则属性值可以被修改;默认为 false
enumerable如果设置为 true,则属性会出现在对象的枚举属性中;默认为 false
configurable如果设置为 true,则可以删除属性或修改其特性;默认为 false

Demo如下:

// 创建一个对象
const person = {};// 使用 Object.defineProperty() 添加一个属性
Object.defineProperty(person, 'name', {value: '码农研究僧',         // 属性值writable: true,         // 允许修改enumerable: true,       // 可以被枚举configurable: true      // 可以被删除或修改特性
});// 输出对象属性
console.log(person.name); // 码农研究僧// 修改属性值
person.name = '码农';
console.log(person.name); // 码农// 删除属性
delete person.name;
console.log(person.name); // undefined// 试图修改一个不可写的属性
Object.defineProperty(person, 'age', {value: 30,writable: false,        // 不可修改
});// 尝试修改不可写的属性
person.age = 25;          // 失败,age 仍然是 30
console.log(person.age);  // 30

截图如下:

在这里插入图片描述

2. Object.defineProperties()

Object.defineProperties() 方法与 Object.defineProperty() 类似,但它允许一次性定义多个属性

基本语法如下:

Object.defineProperties(obj, props)
  • obj: 要在其上定义属性的对象
  • props:一个对象,其中每个属性对应于要定义的属性的描述符

Demo如下

// 创建一个对象
const car = {};// 使用 Object.defineProperties() 添加多个属性
Object.defineProperties(car, {make: {value: '码农',writable: true,enumerable: true,configurable: true},model: {value: '研究僧',writable: false, // 不可修改enumerable: true,configurable: false // 不可删除},year: {value: 2020,writable: true,enumerable: true,configurable: true}
});// 输出对象属性
console.log(car.make); // 码农
console.log(car.model); // 研究僧
console.log(car.year); // 2020// 修改属性值
car.make = '测试1';
console.log(car.make); // 测试1// 尝试修改不可写的属性
car.model = '测试2'; // 失败
console.log(car.model); // 研究僧// 尝试删除不可配置的属性
delete car.model; // 失败
console.log(car.model); // 研究僧

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型提示词简介 举例

目录 大模型提示词(Prompt)详解 1. 什么是AI提示词(Prompt) 2. 为什么提示词对AI结果的影响很大 3. 提示词构成 4. 提示词举例 示例1:生成新闻标题 示例2:创作诗歌 示例3:撰写电子邮件 …

【Java笔记】0-为什么学习Java

呃,当然是为了找个Java的开发工作 当然是由于Java使用的人多和它天生自带的优点了~ 主要优点有以下几点: 简单性 C语法纯净版,没有头文件、指针运算、不用分配内存 面向对象 重点放在对象与其接口上,接近人的逻辑 可移植性 …

Nop平台与APIJSON的功能对比

APIJSON是由腾讯的工程师研发的一款流传甚广的零代码接口与文档ORM库,github的star数高达16.8K。这个库实现了一种基于JSON的轻量级数据交换格式,提供万能通用接口,无需编码即可实现增删改查、跨库连表、嵌套子查询等。APIJSON的生态相当完整…

CAN物理层(ISO 11898-2 2024)

一、说明 CAN(Controller area network)中文名称是控制器局域网,是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线,可以使用双绞线来传输信号,由德国博世公司在20世纪80年代专门为汽车行业开发。 ISO 11898-2 2024版相对于2016版,主要由以下更新…

VQGAN(2021-06:Taming Transformers for High-Resolution Image Synthesis)

论文:Taming Transformers for High-Resolution Image Synthesis 1. 背景介绍 2022年中旬,以扩散模型为核心的图像生成模型将AI绘画带入了大众的视野。实际上,在更早的一年之前,就有了一个能根据文字生成高清图片的模型——VQGAN…

HBuilder X 中Vue.js基础使用4->表单输入绑定(三)

表单绑定是实现动态数据双向绑定的重要部分,它让开发者可以轻松地管理和响应用户输入。本文将详细介绍如何在Vue 3中利用v-model指令以及一些特定修饰符来处理不同类型的表单输入。 v-model双向数据绑定 Vue的 v-model 指令提供了双向绑定的功能,key在…

「虚拟现实中的心理咨询:探索心灵世界的新方法」

内容概要 当我们想到虚拟现实时,很多人会联想到游戏或娱乐,但如今其在心理咨询领域的应用正在逐渐崭露头角。传统的心理咨询方式常常局限在咨询室内,面临着空间和情感隔阂的问题。然而,沉浸式环境的出现,使得治疗者能…

2024最新的开源博客系统:vue3.x+SpringBoot 3.x 前后端分离

本文转载自:https://fangcaicoding.cn/article/54 大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验,截止目前面试过近200位候选人,主导过单表上10亿、累计上100亿数据…

JavaScript 进阶 - 第1天(黑马笔记)

JavaScript 进阶 - 第1天 目录 JavaScript 进阶 - 第1天 作用域 局部作用域 函数作用域 块作用域 全局作用域 作用域链 闭包 变量提升 函数 函数提升 函数参数 默认值 动态参数 剩余参数 箭头函数 箭头函数参数 箭头函数 this 解构赋值 数组解构 对象解构…

MATLAB车道检测与跟踪

读了车道检测这个论文,我理解了利用matlab对车道识别算法进行仿真研究,从仿真的结果中提出具有一定实时性鲁棒性的识别方法。车道检测是智能车辆发展的智能因素。近年来对这项目的研究都是针对特定的环境和道路状况给出了不同的解决方案。近年来,自主驾驶…

pdf转为txt文本格式并使用base64加密输出数据

第一步&#xff0c;pom.xml中引入jar包 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency> 第二步 package org.example.test.example.changefile;…

C++核心编程和桌面应用开发 第十七天(set和multiset容器 pair map和multimap容器)

目录 1.set和multiset容器 1.1构造和赋值 1.2交换和大小 1.3插入和删除 1.4统计和查找 1.5pair对组 1.6set和multiset的区别 1.7指定内置数据类型排序规则 1.8指定自定义数据类型排序规则 2.map和multimap容器 2.1构造和赋值 2.2交换和大小 2.3插入和删除 2.4统计…

【vue】13.深入理解递归组件

在Vue.js的开发实践中&#xff0c;组件是构建界面的核心概念。而递归组件则是一种特殊的组件&#xff0c;它能够自己调用自己&#xff0c;从而创造出无限嵌套的界面结构。本文将带你了解递归组件的应用&#xff0c;以及如何在Vue中实现和使用它。 一.什么是递归组件&#xff1f…

【Python爬虫实战】网络爬虫完整指南:网络协议OSI模型

网络爬虫完整指南&#xff1a;从协议基础到实践应用 什么是网络协议&#xff1f; **网络协议&#xff08;Network Protocol&#xff09;**是指计算机网络中设备和设备之间进行通信的规则和约定。它定义了数据传输的格式、顺序、传输方法和错误处理机制&#xff0c;使不同设备和…

01.如何用DDD重构老项目

学习资料来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 动机DDD与重构实践重构? 重写从一开始就采用DDD重构步骤1. 添加领域模块2.分离出有价值的代码3.迁移到领域模块4.重复2,3 动机 …

OSI公布OSAID 1.0版 “开源人工智能”首次被定义

在2024年ALL THINGS OPEN大会上&#xff0c;Open Source Initiative (OSI) 正式发布了开源人工智能定义&#xff08;OSAID&#xff09;1.0版本&#xff0c;标志着全球首个开源AI标准的诞生。OSAID将作为衡量人工智能系统是否符合“开源人工智能”标准的依据&#xff0c;为社区主…

接口测试(八)jmeter——参数化(CSV Data Set Config)

一、CSV Data Set Config 需求&#xff1a;批量注册5个用户&#xff0c;从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果

pycharm 中 json 库的常用操作

文章目录 1. 导入 json 模块2. 将 Python 对象编码为 JSON 字符串&#xff08;序列化&#xff09;3. 将 JSON 字符串解码为 Python 对象&#xff08;反序列化&#xff09;4. 从文件中读取 JSON 数据5. 将 Python 对象写入 JSON 文件6. 处理 JSON 解码错误总结 在 PyCharm 中&am…

Flutter加载本地HTML的优雅解决方案:轻松实现富文本展示

在移动开发中&#xff0c;展示复杂的富文本是一项常见需求&#xff0c;而有时候我们需要将HTML文件直接嵌入到Flutter应用中。使用HTML不仅能丰富内容展示&#xff0c;还可以避免重复开发。但是&#xff0c;如何在Flutter中高效、优雅地加载本地HTML呢&#xff1f;这篇文章就带…

MySQL数据库数据类型介绍

1. 数值类型 整数类型&#xff1a; TINYINT&#xff1a;1 字节&#xff0c;范围 -128 到 127&#xff08;或 0 到 255&#xff09;。SMALLINT&#xff1a;2 字节&#xff0c;范围 -32,768 到 32,767&#xff08;或 0 到 65,535&#xff09;。MEDIUMINT&#xff1a;3 字节&…