【JavaScript高级】06-JavaScript对象知识增强

news2024/11/24 17:18:05

JavaScript对象的知识增强

  • 对属性操作的控制
    • Object.defineProperty
  • 属性描述符
    • 属性描述符分类
    • 数据属性描述符(理解)
    • 存取属性描述符(掌握)

对属性操作的控制

在前面我们的属性都是直接定义在对象内部,或者直接添加到对象内部的:

但是这样来做的时候我们就不能对这个属性进行一些限制:比如这个属性是否是可以通过delete删除的?这个属性是否在for-in遍历的时候被遍历出来呢?

var obj={
name : "kkk" ,
age:18,
height:1.88

如果我们想要对一个属性进行比较精准的操作控制,那么我们就可以使用属性描述符。通过属性描述符可以精准的添加或修改对象的属性:

属性描述符需要使用Object.defineProperty来对属性进行添加或者修改

Object.defineProperty

在这里插入图片描述

属性描述符

属性描述符分类

属性描述符的类型有两种:

  • 数据属性(Data Properties)描述符(Descriptor) ;
  • 存取属性(Accessor访问器Properties)描述符(Descriptor) ;

在这里插入图片描述

数据属性描述符(理解)

数据数据描述符有如下四个特性:

[[Configurable]]︰:表示属性是否可以通过delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符;

  • 当直接在一个对象上定义某个属性时,这个属性的[[Configurable]]为true;
  • 当通过属性描述符定义一个属性时,这个属性的[[Configurable]]默认为false;

[[Enumerable]]:表示属性是否可以通过for-in或者Object.keys()返回该属性;

  • 当直接在一个对象上定义某个属性时,这个属性的[[Enumerable]]为true;
  • 当通过属性描述符定义一个属性时,这个属性的[[Enumerable]默认为false;

[[Writable]]:表示是否可以修改属性的值;

  • 当直接在一个对象上定义某个属性时,这个属性的I[IWritable]]为true;
  • 当通过属性描述符定义一个属性时,这个属性的[[Writable]]默认为false;
<script>
var obj=i
name:"kkk" ,//默认configurabLe: true
age:18
}
object.defineProperty(obj, "name" , {
configurable: false,//告诉s引擎,obj对象的name属性不可以被删除
enumerable: false,//告诉js引擎, obj对象的name属性不可枚举(for in/Object.keys)
writable: false//告诉js引擎, obj对象的name属性不写入(只读属性readonly)
value: "coderwhy"//告诉js引整,返回这个vaLue
})

delete obj.name
console.log(obj)//kkk

//通过object.defineProperty添加一个新的属性object.defineProperty(obj,"address",{})
delete obj.address//删除失败,此处默认configurable: false
console.log(obj)
console.log(object.keys(obj))

obj.name = "kobe"
console.log(obj.name)

存取属性描述符(掌握)

[[Configurable]]:表示属性是否可以通过delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符;

  • 和数据属性描述符是一致的;
  • 当直接在一个对象上定义某个属性时,这个属性的[[Configurable]]为true;
  • 当通过属性描述符定义一个属性时,这个属性的[[Configurable]]默认为false;

[[Enumerable]]:表示属性是否可以通过for-in或者Object.keys()返回该属性;和数据属性描述符是一致的;

  • 当直接在一个对象上定义某个属性时,这个属性的[LEnumerable]]为true;
  • 当通过属性描述符定义一个属性时,这个属性的[[Enumerable]]默认为false;

[[get]]:获取属性时会执行的函数。默认为undefined

[[set]]:设置属性时会执行的函数。默认为undefined

存储属性符测试代码:

在这里插入图片描述

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

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

相关文章

【MyBatis源码分析】一.JDBC回顾

MyBatis源码分析 文章目录 MyBatis源码分析一、JDBC开发回顾使用JDBC连接数据库SPI与JDBCDirverManagerDataSourceORM框架版本:mybatis 3.5.x 一、JDBC开发回顾 Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套…

mac-m1-docker安装nacos异常

目录 0. 官方文档 1. 修改docker的配置文件 2. 下载nacos代码 3. Dockerfile文件内容替换 4. 创建nacos的docker镜像 5. 启动nacos服务 6. 操作完后&#xff0c;打开docker mac docker安装nacos异常 0. 官方文档 Nacos Docker 快速开始 ERROR org.springframework.b…

无线遥控方案无线收发 soc 芯片 CI2451CI2454

无线遥控器、无线键鼠、无线玩具、无线灯控、无线音频等应用在生活中随处可遇&#xff0c;无线遥控最早起源于 18 世纪末&#xff0c;如今随着应用市场的扩大&#xff0c;家家户户也都用起了无线产品&#xff0c;这也意味着给人们带来极大便利的同时&#xff0c;成本也能得到大…

Flink的状态一致性

一致性的划分 通常来说&#xff0c;状态一致性分为三个级别 at-most-once&#xff1a;至多一次&#xff0c;发生故障恢复后数据可能丢失at-least-once&#xff1a;至少一次&#xff0c;发生故障恢复后数据可能多算&#xff0c;绝对不会少算exactly-once&#xff1a;精确一次&…

用二叉树或栈求表达式的值--代码实现+算法分析

解决表达式求值问题有两种方法&#xff0c;一种是利用栈和后缀表达式求解&#xff0c;另一种是二叉树中序存储表达式。所以本文分为栈和二叉树两大部分带领读者求解表达式。 1. 利用栈解决表达式求值问题 所谓表达式&#xff0c;就是由变量、常量以及运算符组合而成的式子。其…

集群部署看过来,低代码@AWS智能集群的架构与搭建方案

亚马逊AWS是葡萄城的生态合作伙伴。为了帮助您充分利用AWS的托管服务快速构建起一套集群环境&#xff0c;彻底去掉“单一故障点”&#xff0c;实现最高的可用性&#xff0c;我们准备了**《低代码智能集群AWS的架构与搭建方案》**看完本文&#xff0c;带你掌握“基于nginx配置服…

Origin绘制多折线图

Origin的优势区间相对于python和R在于数据量大时处理方便 尤其是多维度、多线、多拟合 尝试复现上图 1.首先把20列数据复制过去 2.全选之后&#xff08;ctrlA&#xff09;&#xff0c;然后点Plot——Line 3.随便选一根线&#xff0c;双击进入属性设置&#xff08;Origin交互设…

计算机网络-传输层:TCP协议

目录 一、协议格式 二、协议特性 1.面向连接 1.1三次握手建立连接 1.2四次挥手断开连接 为什么握手是三次&#xff0c;挥手是四次&#xff1f; 三次握手失败后&#xff0c;两端如何处理&#xff1f; 一台主机上出现了大量CLOSE_WAIT状态连接的原因&#xff1f; TIME_W…

基于神经网络多项式插值的图像超分辨重构研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、基于单帧图像的超分辨率重构技术✳️ 2.1 最近邻域插值法✳️ 2.2 双线性插值法✳️ 2.3 双三次插值法(Keys’插值)✳️ 三、神经网络插值原理✳️ 3.1 训练阶段&#xff1a;✳️ 3.2 测试阶段✳️ 四、实验验证✳️ 4.1 基于神经网络双线…

Hive、Impala、Hue集成LDAP

1.LDAP简介 轻型目录访问协议&#xff0c;是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的目录信息。在hadoop生态圈中&#xff0c;LDAP主要是用来做账号管理的。 2.LDAP安装配置 2.1 安装LDAP&#xf…

基于PHP+MYSQL宠物领养系统的开发与设计

市面上的宠物之家网站大多只是给爱宠人士一个交流的平台,给爱宠人士一个学习宠物习性,宠物购买的一个集合性的平台。很少有宠物领养功能,然而现在社会上有着太多的流浪宠物需要得到人们的关爱,这是很多宠物之家网站没有做到的。宠物之家网站正是顺应了当下的宠物热潮,为广大消费…

LeetCode | 1851.包含每个查询的最小区间

LeetCode | 1851.包含每个查询的最小区间 给你一个二维整数数组 intervals &#xff0c;其中 intervals[i] [lefti, righti] 表示第 i 个区间开始于 lefti 、结束于 righti&#xff08;包含两侧取值&#xff0c;闭区间&#xff09;。区间的 长度 定义为区间中包含的整数数目&…

基于java+ssm+shiro的出租房管理平台

✌博主介绍✌:一个致力于全战开发的代码热爱者 龙门客栈管理平台一、前言介绍&#xff1a;二、系统设计&#xff1a;2.1 系统整体架构&#xff1a;2.1.1 数据库表结构的介绍&#xff1a;2.1.2 系统功能设计&#xff1a;三、功能截图&#xff1a;3.1 登录注册&#xff1a;3.2 基…

使用react-grid-layout和echarts-for-react实现一个支持拖拽的自定义响应式dashboard页面

使用react-grid-layout和echarts-for-react实现一个支持拖拽的自定义响应式dashboard页面 需求概要 在前端工作中&#xff0c;我们会经常遇到自定义dashboard页这样的需求。然后我想做一个能够让用户可以在面板上自由的拖拽&#xff0c;固定&#xff08;不允许拖拽&#xff0…

游戏源码编程软件,对于新手来说十分友好,纯中文的界面让所有功能都一目了然,操作相当简单

这是一款免费的图像化编程工具,使用者无需会任何编程语言即可通过拼接积木的形式搭建出属于自己的程序。 编程猫kitten使用教程: 1、打开软件,进入软件主界面,运行界面如下图。 2、点击文件,可选择打开、新建、打开本地作品等。 3、可在方框内输入作品名称,快速进行输入…

安静!听听AI眼中岛国老师的声音~

大家好&#xff0c;我是鸟哥。一个半路出家的程序员。 最近在折腾自己的微信机器人&#xff0c;除了自动回复&#xff0c;自动拉群等常规的功能外&#xff0c;我准备给它赋予一些AI功能&#xff0c;毕竟这两年人工智能火的一塌糊涂。例如前段时间风靡朋友圈的人物头像动漫化&am…

如何保存/同步多架构容器 Docker 镜像

前言 随着容器、芯片技术的进一步发展&#xff0c;以及绿色、节能、信创等方面的要求&#xff0c;多 CPU 架构的场景越来越常见。典型的应用场景包括&#xff1a; 信创&#xff1a;x86 服务器 鲲鹏 ARM 等信创服务器&#xff1b;个人电脑&#xff1a;苹果 Mac M1 Windows 电…

Triton Inference Server 环境配置

本人环境 Ubuntu18.04&#xff0c;3090显卡&#xff0c;显卡驱动版本510.85.02&#xff0c;cuda版本11.6&#xff0c;docker版本20.10.12(注意&#xff1a;docker一定要通过apt安装&#xff0c;用snap安装会报错) 安装步骤 1. 根据驱动版本和cuda版本下载对应版本的Triton D…

java计算机毕业设计ssm驾校预约考试管理系统a3cf7(附源码、数据库)

java计算机毕业设计ssm驾校预约考试管理系统a3cf7&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

第四章. Pandas进阶—日期数据处理

第四章. Pandas进阶 4.7 日期数据处理 1.DataFrame的日期数据转换&#xff08;to_datetime&#xff09; 在日常工作中&#xff0c;常见的日期方式有很多种&#xff0c;例如’20221123’&#xff0c;‘2022.11.23’&#xff0c;‘2022/11/23’&#xff0c;‘23/11/2022’&#…