当前位置: 首页 > news >正文

05_属性描述符

05_属性描述符


文章目录

  • 05_属性描述符
  • 一、属性描述符是什么?
  • 二、属性描述符
    • ①:查看属性描述
    • ②:设置属性描述符
    • ③:案例
      • 01.代码实现
      • 02.代码实现(优化)


一、属性描述符是什么?

属性描述符的结构

在定义对象、定义属性时,我们曾经介绍过属性描述符,属性描述符实际上就是一个对象。

属性描述符一共有 6 个,可以选择使用。

  • value:设置属性值,默认值为 undefined。
  • writable:设置属性值是否可写,默认值为 true。
  • enumerable:设置属性是否可枚举,即是否允许使用 for/in 语句或 Object.keys( ) 函数遍历访问,默认为 true。
  • configurable:设置是否可设置属性特性,默认为 true。如果为 false,将无法删除该属性,不能够修改属性值,也不能修改属性的属性描述符。
  • get:取值函数,默认为 undefined。
  • set:存值函数,默认为 undefined。

二、属性描述符

①:查看属性描述

let obj = {a: 1,b: 2
}let desc = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(desc)

在这里插入图片描述

②:设置属性描述符

let obj = {a: 1,b: 2
}// 获取 属性描述符
let desc = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(desc)// 设置属性描述符
Object.defineProperty(obj, 'a',{value: 10,writable: false, // 不可从重写// enumerable: false,  // 不可遍历// configurable: false // 不可修改属性描述符本身
})console.log('修改前a的值:',obj.a)
obj.a = 100
console.log('修改后a的值:',obj.a)

在这里插入图片描述](https://img-blog.csdnimg.cn/0cbe074a21b24b9da6454181b2847e13.png

③:案例

01.代码实现

设置一个对象的属性只读不能修改

// 定义一个名为 aGoods 的对象,表示商品信息
let aGoods = {pic: '.',title: '..',desc: `...`,sellNumber: 1,favorRate: 2,price: 3
}// 定义一个名为 UIGoods 的类
class UIGoods {// 构造函数,接收一个 goods 对象作为参数constructor(goods) {// 使用 Object.defineProperty 定义名为 data 的属性Object.defineProperty(this, 'data', {value: goods,       // 设置属性的值为传入的 goods 对象writable: false,    // 不可写,即不能通过赋值修改属性的值configurable: false, // 不可配置,即不能通过 delete 操作符删除属性})}
}
// 创建一个 UIGoods 类的实例,传入 aGoods 对象作为参数
let goods = new UIGoods(aGoods);
// 尝试修改 goods 实例的 data 属性的值
goods.data = 'abc';
// 输出修改后的 goods 实例的 data 属性的值
console.log(goods.data);

在这里插入图片描述

问题:刚刚我们已经实现了属性不能修改,但是我们尝试修改(没有修改成功,也没有任何报错)试想一下如果代码比较多的情况下,我们可能也会忘记该属性不能修改,当我们修改属性值后.......

02.代码实现(优化)

  • 我们需要的效果是,当属性设置不能修改后,在尝试修改给出一个错误提示
// 定义一个名为 aGoods 的对象,表示商品信息
let aGoods = {pic: '.',title: '..',desc: `...`,sellNumber: 1,favorRate: 2,price: 3
}// 定义一个名为 UIGoods 的类
class UIGoods {// 构造函数,接收一个 goods 对象作为参数constructor(goods) {// 使用 Object.defineProperty 定义名为 data 的属性Object.defineProperty(this, 'data', {configurable: false, // 不可配置,即不能通过 delete 操作符删除属性get:function (){ // 取值函数return goods;},set: function (){ // 存值函数throw new Error('兄弟,您正在尝试修改 data 属性,这是不可能的!死心吧!')}})}
}
// 创建一个 UIGoods 类的实例,传入 aGoods 对象作为参数
let goods = new UIGoods(aGoods);
// 尝试修改 goods 实例的 data 属性的值
goods.data = 'abc';
// 输出修改后的 goods 实例的 data 属性的值
console.log(goods.data);

在这里插入图片描述

相关文章:

05_属性描述符

05_属性描述符 文章目录 05_属性描述符一、属性描述符是什么?二、属性描述符①:查看属性描述②:设置属性描述符③:案例01.代码实现02.代码实现(优化) 一、属性描述符是什么? 属性描述符的结构 在…...

vue day2

1、指令修饰符:.指明一些指令后缀,不同后缀封装不同处理操作 按键修饰符:keyup.enter v-model修饰符: v-model.trim:去首位空格 v-model.number:转数字 事件修饰符: 阻止事件冒泡&#xff1…...

四川劳动保障杂志社四川劳动保障编辑部四川劳动保障杂志2023年第10期目录

主题报道 四川抢抓“金九银十”招聘季多措并举稳就业促就业 举措频“上新” 金秋送岗忙 张玉芳; 2-5 法眼《四川劳动保障》投稿:cnqikantg126.com 筑牢长期护理保险基金安全防线 李科仲;赖晓薇; 6-7 调研 提升职业技能培训工作的举措 寇爵; 8-9 城乡…...

python数据类型

int 整型 i 1str 字符串 name1Emliy name2"你好" content""" Emily:你好! """ test你最"帅" test2"你最帅"float 浮点类型 height182.5 weight45.3bool 布尔类型 f1True f2Falselist …...

大数据-之LibrA数据库系统告警处理(ALM-37004 Datanode主备不同步或者断连)

告警解释 当DN主实例与DN备实例连接异常时,产生该告警。 告警属性 告警ID 告警级别 可自动清除 37004 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生…...

带你用uniapp从零开发一个仿小米商场_2.创建空白项目及公共样式引入

创建空白项目 打开uniapp 点击新建->项目 如下, 是编辑你项目的名字的地方是你项目存放地址,可以点击浏览器去文件管理里面选地址是模板选择,这里选择默认模板就好是一些其他选择比如uvue能让你项目在编译成软件时运行更快,unicloud能让你用js写后端,且直接就是云开发,g…...

1144. 连接格点,Kruskal算法,二维矩阵压缩为一维

有一个 m 行 n 列的点阵,相邻两点可以相连。 一条纵向的连线花费一个单位,一条横向的连线花费两个单位。 某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。 输入格式 第一行输入两个正整数 m 和 n。 以下若…...

C++ : 友元(未完结)

不能从外部访问类的私有数据成员和方法,但这条规则不适用于友元类和友元函数。要声明友元 类或友元函数,可使用关键字 friend,通过让函数成为类的友元,可以赋予该函数与类的成员函数 同的访问权限。 生活中你的家有客厅 (Public)…...

Nginx 服务器 SSL 证书安装部署

操作场景 本文档以证书名称 menglinfeng.top 为例。 Nginx 版本以 nginx/1.18.0 为例。 当前服务器的操作系统为 CentOS 7,由于操作系统的版本不同,详细操作步骤略有区别。 安装 SSL 证书前,请您在 Nginx 服务器上开启 “443” 端口&#xf…...

GC9118S低压 5V 全桥驱动芯片,内置过温保护,低电流睡眠模式,可替代TMI8118

GC9118S 是一款低压 5V 全桥驱动芯 片,为摄像机、消费类产品、玩具和其他低 压或者电池供电的运动控制类应用提供了集 成的电机驱动解决方案。 GC9118S 能提供高达 1.1A 的持续输出 电流。可以工作在 2~6V 的电源电压上。 GC9118S 具有 PWM ( IN/…...

windows dockerdesktop 安装sqlserver2022

1.下载windows dockertop软件 下载连接 2.安装完成配置,下载源地址 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": …...

在ubuntu系统安装SVN服务端,并通过客户端进行远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...

STL函数对象-C++

1. 函数对象 1.1 函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的 () 时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不…...

Ubuntu 设置Nginx开机自启

1.建立自启动服务文件 vim /usr/lib/systemd/system/nginx.service Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx…...

npm中的npx命令

1.概念 npx是一个执行npm软件包的二进制文件&#xff0c;通俗的讲&#xff0c;他可以执行npm的一些指令。 2.示例 用babel将ES6语法转为ES5语法 npx babel src/js -d dist/js会执行babel的相关功能&#xff0c;如果没有安装&#xff0c;也会自动安装。 当在执行npx <co…...

python绘制Z形图 青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析2023年5月

目录 python绘制Z形图 一、题目要求 二、算法分析 三、程序代码...

conda环境下module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

1 问题描述 在训练语音模型时&#xff0c;出现如下错误&#xff1a; Traceback (most recent call last):File "/opt/Bert-VITS2-2.0.2.1/train_ms.py", line 660, in <module>run()File "/opt/Bert-VITS2-2.0.2.1/train_ms.py", line 282, in run…...

蓝桥杯每日一题2023.11.26

题目描述 奖券数目 - 蓝桥云课 (lanqiao.cn) 将每一个数字进行一一枚举&#xff0c;如果检查时不带有数字4则答案可以加1 #include<bits/stdc.h> using namespace std; int ans; bool check(int n) {while(n){if(n % 10 4)return false;n / 10; }return true; } int m…...

Centos 7.9 Install Docker Insecure Registry

文章目录 1. 镜像存储规划2. 安装定制 docker3. 部署 registry4. 验证镜像仓库 1. 镜像存储规划 linux LVM /dev/sdb mount dir /data【linux LVM 磁盘挂载目录】 创建两个目录 一个 docker 数据存储目录 &#xff1a;/data/docker&#xff0c;默认一般为linux为 /var/lib/d…...

探秘网络通信:UDP与TCP/IP的奥秘

**> &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 探秘网络通信&#xff1a;UDP与TCP/IP的奥秘 前言第一&#xff1a;UDP基础概念UDP的基础概念&#xff1a;UDP的特点和优势UDP与TCP/IP的关系 工作原理1. 无连接性和面…...

基于SpringBoot + Vue的社区便民服务平台

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

K8s网络策略深度实验:用NetworkPolicy实现微服务隔离(含Calico实战)

K8s网络策略深度实验&#xff1a;用NetworkPolicy实现微服务隔离&#xff08;含Calico实战&#xff09; 在云原生架构中&#xff0c;微服务间的网络隔离是安全工程师必须掌握的核心技能。当多个租户或业务线共享同一个Kubernetes集群时&#xff0c;不加控制的Pod间通信可能引发…...

树莓派实战指南:从零搭建DHT11温湿度监测系统

1. 认识你的硬件伙伴&#xff1a;DHT11与树莓派 第一次拿到DHT11温湿度传感器时&#xff0c;我盯着这个比指甲盖还小的模块看了半天——就这么个小东西能测量环境数据&#xff1f;后来实测发现它虽然精度不如实验室设备&#xff0c;但家用完全够用。DHT11通过单总线协议通信&am…...

别再死记硬背了!ZBrush 2024最常用快捷键清单,附送一张桌面壁纸随时查

ZBrush 2024高效工作流&#xff1a;快捷键深度解析与实战应用指南 在数字雕塑的世界里&#xff0c;ZBrush早已成为行业标杆。但很多创作者在初次接触这款软件时&#xff0c;往往会被其复杂的快捷键系统所困扰。实际上&#xff0c;掌握快捷键并非简单的记忆游戏&#xff0c;而是…...

OpenClaw模型切换指南:Kimi-VL-A3B-Thinking与其他多模态模型对比测试

OpenClaw模型切换指南&#xff1a;Kimi-VL-A3B-Thinking与其他多模态模型对比测试 1. 为什么需要模型对比测试 在OpenClaw的实际使用中&#xff0c;我发现多模态模型的选择直接影响自动化任务的成败。上个月尝试用AI助手处理一份包含图表和文字的调研报告时&#xff0c;不同模…...

智能生态缸系统设计与实现:嵌入式Linux与Qt应用

1. 项目背景与需求分析在当代都市生活中&#xff0c;越来越多的人开始关注室内绿植养护。传统的生态缸管理方式存在诸多痛点&#xff1a;需要频繁人工干预、难以精准控制环境参数、缺乏实时监测手段等。这些问题直接影响了植物的生长状态和观赏价值。我们设计的智能生态缸系统正…...

终极指南:Cert-Manager事件溯源实现与审计追踪全解析

终极指南&#xff1a;Cert-Manager事件溯源实现与审计追踪全解析 【免费下载链接】cert-manager Automatically provision and manage TLS certificates in Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ce/cert-manager Cert-Manager作为Kubernetes生态中自动…...

ModTheSpire终极指南:解锁《杀戮尖塔》无限可能的模组加载器

ModTheSpire终极指南&#xff1a;解锁《杀戮尖塔》无限可能的模组加载器 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是专为《杀戮尖塔》设计的开源模组加载器&#xff…...

鱼皮 AI 导航网站,突然起飞了!

大好家&#xff0c;我是程序员鱼皮。 去年 11 月&#xff0c;我带团队开发了一个 完全免费 的网站&#xff0c;也就是「鱼皮 AI 导航」。 如今 AI 真的太火了&#xff0c;一定是未来的大趋势&#xff1b;再加上很多关注我的朋友私信我&#xff0c;问怎么获取 AI 工具和教程&am…...

ai一键生成node.js环境配置教程,快马平台助你跳过繁琐安装步骤

最近在学习Node.js开发时&#xff0c;发现环境配置这个入门步骤对新手来说确实有点麻烦。不同操作系统下的安装方式差异大&#xff0c;版本选择也让人纠结。好在发现了InsCode(快马)平台的AI辅助开发功能&#xff0c;可以自动生成完整的配置教程&#xff0c;分享下我的使用体验…...