05_属性描述符

news2024/12/23 20:25:38

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);

在这里插入图片描述

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

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

相关文章

Transformer中的多头注意力机制-为什么需要多头?

Transformer为什么使用多头注意力机制呢? 多头可以学习到不同维度的特征和信息。为什么可以学习到不同维度的信息呢? 答案是:多头注意力机制的组成是有单个的self attention,由于self attention通过产生QKV矩阵来学习数据特征&a…

字符串入门算法题!

概述 字符串和数组一样算是比较简单的题目,正适合打算法基础,一定要认真对待!!! 字符串类型的算法问题可以分为简单、中等和困难的难度级别,基础类型一些基本的字符串处理问题,如字符串的拼接…

2023加拿大毕业典礼:共赴一场相遇 遥望未来可期

放眼国际金融,启幕璀璨时代。加拿大时间2023年11月14-16日,中国人民大学-加拿大女王大学金融硕士2023届行业高管班及国际班毕业生们携亲友,参加了为期3天的毕业庆祝活动,从加拿大女王大学史密斯商学院的多伦多教学区到女王大学的金…

随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress

​ 引言 作为一名技术博主,提高博客发布效率是我们始终追求的目标。在这篇文章中,我将分享一个基于Python的脚本,能够实现博客多平台发布,具体来说,是自动发布文章到WordPress。通过这个简单而高效的脚本&#xff0c…

考试周刊杂志考试周刊杂志社考试周刊编辑部2023年第46期目录

教育教学研究 丰富作业形式 拓展课堂教学——“双减”下初中英语优化作业设计探析 王慧; 1-5 博学慎思明辨 撬动思维杠杆——论“思辨性阅读与表达”学习任务群范式构建 丁亚琴; 6-10《考试周刊》投稿邮箱:cn7kantougao163.com(注明投稿“《考试周刊》”) 崔…

折线图,样式调整background、serice、xAxis、yxAis等

效果展示: option参数: let option {backgroundColor: "rgba(48, 65, 90, 1)",title: {// text: obj.stnm,// subtext: obj.datasource,textStyle: {color: "#ffffff"},right: 10// left: center,// itemGap: 4},tooltip: {trigge…

JOSEF 综合继电器 HJZZ-32/2 AC220V 合闸延时整定0.02-9.99S

系列型号: HJZZ-91分闸、合闸、电源监视综合装置; HJZZ-92/1分闸、合闸、电源监视综合装置; HJZZ-92/2分闸、合闸、电源监视综合装置; HJZZ-92/2A分闸、合闸、电源监视综合装置; HJZZ-92/3分闸、合闸、电源监视综…

乐鑫推出 ESP ZeroCode ExL 模组

乐鑫推出 ESP ZeroCode ExL 模组,由 AWS IoT ExpressLink 提供支持,可简化用户构建兼容 Matter 的云连接设备。 为简化 Matter 设备的开发,乐鑫在年初发布了 ESP ZeroCode 模组和 ESP ZeroCode 控制台。ESP ZeroCode 模组非常适合一些简单设…

Gin框架如何使用并搭建一个后台管理系统 RBAC 权限管理(六)

一、RBAC 实现流程 1 、实现角色的增、删、改、查 2 、实现用户的增、删、改、查,增加修改用户的时候需要选择角色 3 、实现权限的增、删、改、查 (页面菜单) 4 、实现角色授权功能 5 、判断当前登录的用户是否有访问菜单的权限 6 、根据当前登录账户的角色信息动态显…

如何解决msvcp140.dll丢失问题,分享5个亲测有效的方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,它是由Microsoft公司提供的运行…

seata集成springboot的一些错误小计

1 seata依赖没找到 dependencies.dependency.version for com.alibaba.cloud:spring-cloud-starter-alibaba-seata:jar is missing. line 126, column 21错误原因:未指定具体的seata版本 解决 <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-st…

C语言:写一个函数,求字符串的长度,在main函数中输入字符串并输出其长度(指针)

分析&#xff1a; 在程序中&#xff0c;定义一个函数 fix&#xff0c;该函数使用指针变量来访问字符串中的每个字符&#xff0c;并计算出字符串的长度。fix 函数的参数为指向 char 类型的指针变量 p&#xff0c;表示需要计算长度的字符串。 在主函数 main 中&#xff0c;定义一…

全自动气象监测站天气预测的革新者

随着科技的不断进步&#xff0c;我们的生活变得越来越智能化。其中&#xff0c;WX-CQ12 全自动气象监测站以其精准的数据和实时的天气预报&#xff0c;成为了天气预测的革新者。本文将详细介绍全自动气象监测站的优势及其对人们生活的影响。 一、全自动气象监测站的优势 精准…

怎么把视频声音提取成MP3?一分钟解决!

有的时候&#xff0c;我们在看一些综艺访谈节目的时候&#xff0c;觉得里面干货满满&#xff0c;会忍不住想单独把音频下载出来单独听&#xff0c;还可以防止会员到期后不可以再播放&#xff0c;下面就向大家介绍三种好用的视频音乐提取成MP3的方法。 方法一&#xff1a;使用野…

HTTP 和 HTTPS 之间除了安全性区别外,还有哪些区别

HTTP 和 HTTPS 是两种常见的网络协议&#xff0c;它们都是用于在浏览器和服务器之间传输数据的。但是&#xff0c;它们之间也有一些重要的区别&#xff0c;这些区别涉及到数据的安全性、传输性能、使用成本和搜索排名等方面。本文将从以下几个方面来介绍 HTTP 和 HTTPS 的区别&…

loadrunner-导入Fiddler数据包方法

文章目录 一、Fiddler获取相关接口&#xff0c;保存为.saz格式二、在loadrunner12中新建脚本&#xff0c;选择协议为HTTP/HTML&#xff0c;然后在录制选项中录制模式选为捕获的流量文件分析&#xff0c;然后选择刚保存的saz文件三、生成完脚本后&#xff0c;点击“关联”可自动…

安防视频监控/磁盘阵列/集中云存储平台EasyCVR设备录像保活不生效原因是什么?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

c语言实现猴子选大王问题

办法如下: 猴子按1,2…n编号围坐一圈, 从第一只开始按1,2,…m报数, 报m的退出, 从下一只开始, 继续循环报数, 剩下的最后一只猴子就是大王, 编程输出大王的序号。 代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int strarray(int* p, int m…

Goby新功能大揭秘:低感知扫描模式,让你的挖洞之旅更丝滑!

​​0x01 前言 在上一篇文章中&#xff0c;详细介绍了如何利用Goby最新的插件成功打通了全自动化渗透测试流程&#xff0c;并且初步还取得了不错的成绩&#xff0c;很多师傅们都纷纷表示想体验一波。由于账号的限制&#xff0c;暂时还不能第一时间体验。但&#xff01;还记得上…

如何使用Portal产品配置信息展现

门户集成平台可以根据用户的商业需求&#xff0c;以及用户使用特点和所处角色的不同&#xff0c;形成的个性化的应用结构&#xff0c;Portal门户集成平台是一种用于构建企业级门户网站的软件平台&#xff0c;它提供了一个统一的入口&#xff0c;将各种应用程序、信息资源和服务…