js对象属性

在面向对象的语言中有一个标志,那就是都有类,通过类可以创建任意多个相同属性、方法的对象。在js中没有类的存在,所以js中的对象,相对于类语言中对象有所不同。

js中定义对象为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”

就相当于说对象是一组没有特定顺序的值,对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值。可以想象成散列表,无非就是一组名值对,其中值可以是数据或者函数。

每个对象都是基于一个引用类型创建的。

1. 创建对象

之前创建对象都使用new方法,然后再定义其属性、方法。

const person = new Object();
person.name = '张三';
person.eat = function() {console.log('吃饭');
}

上面就是通过之前的方法创建了一个person对象,其中有一个name属性和一个eat方法。

现在一般使用字面量进行定义对象,比较方便。

const person = {name: '张三',eat() {console.log('吃饭');}
}

2. 属性类型

在对象中属性类型分为两种,分别是数据属性和访问器属性。

1. 数据属性

数据属性包含一个数据值的位置,可以进行数据的访问以及修改。

数据属性具有四个特性,

[[configurable]]:决定这个属性是否能进行删除,或者变为访问器属性,默认为true。

[[enumerable]]:决定这个属性是否能通过for…in 遍历该属性,默认为true。

[[writable]]:决定这个属性能放写入,是否为只读,默认为true。

[[value]]:包含该属性的值,从这里进行读取,然后设置值也会保存到这里,默认是undefined。

修改特性

如果想修改数据属性的特性,可以使用Object.defineProperty()方法,接受三个参数,分别是要修改属性特性的对象、该属性名称、以及要修改的特性。

const person = new Object();
Object.defineProPerty(person, 'name', {n: false,value: '张三',
})

上面创建了一个person对象,并设置其属性值为张三,并且不能被for in进行遍历该属性。

注意点

如果一个属性特性configurable被设置成false,该属性一旦被定义成false,就不能再进行除writable之外特性的修改,如果修改都会报错。如果属性调用delete,在非严格模式下没有任何反应,但是在严格模式下会抛错。

const person = new Object();
person.age = 1;
// 特性configurable为false
Object.defineProperty(person, 'name', {value: '张三',
})// 此时执行下列代码会报错
Object.defineProperty(person, 'name', {writable: '张三1',
})

对象属性特性

使用Object.defineProperty()生成一个新属性时,如果不指定特性,默认configurable,enumerable,writable都为false。

const person = new Object();
person.age = 1;
Object.defineProperty(person, 'name', {value: '张三',
})
// 查询特性
console.log(Object.getOwnPropertyDescriptor(person, 'name'));
// 结果
// {value: '张三', writable: false, enumerable: false, configurable: false}

对象属性特性新增默认false

2. 访问器属性

访问器属性指的是具有一个get、set函数,用get函数获取属性值,set函数设置一个属性值,负责处理数据。

[[Configurable]];表示能否通过delete删除属性。

[[Enumerable]]:表示能否通过for in查询返回属性。

[[Get]]:用于读取属性的值,默认为undefined。

[[Set]]:用于写入属性,默认为undefined。

const obj = {count: 1,num: 2,
};
Object.defineProperty(obj, 'num1', {get() {return this.num;}set(val) {this.num = val;this.count = val + 12;}
})
obj.num1 = 200;
console.log(obj.count); // 212

访问器属性常用于设置一个属性值会导致其他属性发生变化。

3. 查询属性类型的特性

上面讲了关于属性的类型的特性,当时如果想查询一个对象的属性特性时,可以使用Object.getOwnPropertyDescriptor()方法,接受两个参数,一个属性所在的对象,一个要读取的属性名称,返回一个对象。

如果是数据属性,这个对象的属性有configurable、enumerable、writable和value。

如果是访问器属性,这个对象的属性有configurable、enumerable、get和set。

4. 设置多个属性值

一般情况下会一次性设置多个属性值,可以使用Object.defineProperties()方法,有两个参数,第一个是设置属性的对象,第二个设置的属性

const person = {};
Object.defineProperties(person, {name: {writeable: true,value: '张三',}age: {get: function() {return this.name;}set: function(val) {}},
})

这里通过该方法新增了name、age两个属性。

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

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

相关文章

虹科案例 | LIN/CAN总线汽车零部件测试方案

文章来源:虹科汽车电子 点此阅读原文 虹科的LIN/CAN总线汽车零部件测试方案是一款优秀的集成套装,基于Baby-LIN系列产品,帮助客户高效完成在测试、生产阶段车辆零部件质量、功能、控制等方面的检测工作。 1、汽车零部件测试的重要性&#xf…

乐鑫科技全球首批支持蓝牙 Mesh Protocol 1.1 协议

乐鑫科技 (688018.SH) 非常高兴地宣布,其自研的蓝牙 Mesh 协议栈 ESP-BLE-MESH 现已支持最新蓝牙 Mesh Protocol 1.1 协议的全部功能,成为全球首批在蓝牙技术联盟 (Bluetooth SIG) 正式发布该协议之前支持该更新的公司之一。这意味着乐鑫在低功耗蓝牙无线…

【Java 基础篇】Java Stream 流详解

Java Stream(流)是Java 8引入的一个强大的新特性,用于处理集合数据。它提供了一种更简洁、更灵活的方式来操作数据,可以大大提高代码的可读性和可维护性。本文将详细介绍Java Stream流的概念、用法和一些常见操作。 什么是Stream…

API网关是如何提升API接口安全管控能力的

API安全的重要性 近几年,越来越多的企业开始数字化转型之路。数字化转型的核心是将企业的服务、资产和能力打包成服务(服务的形式通常为API,API又称接口,下文中提到的API和接口意思相同),从而让资源之间形…

怎么在OPPO手机桌面上添加文字?便签桌面插件添加教程

很多年轻女性在选择手机时,都比较青睐于设计时尚靓丽、轻薄且续航好、系统流畅、拍照清晰的OPPO手机,并且OPPO为不同的用户提供了高中低不同价格档位的手机型号,能够满足绝大多数女性消费者的使用需求。 不过有不少OPPO手机用户表示&#xf…

关于项目、项目集、项目组合以及运营管理之间的关系

什么是项目? 【项目】这个名词,其实各位一点都不陌生,各位从小到大在各种报章杂志,甚至是每晚的新闻播报里面,每每都会看到或是听到【项目】这个词语,甚至在各位进入大学,或是研究生的阶段里就…

基于人脸5个关键点的人脸对齐(人脸纠正)

摘要:人脸检测模型输出人脸目标框坐标和5个人脸关键点,在进行人脸比对前,需要对检测得到的人脸框进行对齐(纠正),本文将通过5个人脸关键点信息对人脸就行对齐(纠正)。 一、输入图像…

ORB-SLAM2实时稠密地图,解决运行报段错误(核心已转储)运行数据集时出现段错误,出现可视化界面后闪退(添加实时彩色点云地图+保存点云地图)

高翔的稠密建图仓库 1. git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git 2. 去ORB SLAM2里拷贝Vocabulary到/home/cgm/ORBSLAM2_with_pointcloud_map/ORB_SLAM2_modified文件夹下 3. 删除一些build文件夹 删除ORB_SLAM2_modified/Thirdparty/DB…

哈希 -- 位图、布隆过滤器、海量数据处理

目录 一、位图1.1 经典题目1.2 位图概念1.3 位图的应用1.4 关于位图的三个经典问题 二、布隆过滤器2.1 布隆过滤器的提出2.2 布隆过滤器的概念2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器删除2.6 代码实现2.7 布隆过滤器的优点2.8 布隆过滤器的缺陷2.9 布隆过滤器…

TongWeb8下应用忙碌线程监控

问题 : 在系统运行过程中发现TongWeb进程占用CPU过高,需要分析是应用哪里引起的问题。 分析过程(仅限Linux环境): 1. 通过top命令查看TongWeb的java进程占用的CPU情况。 查看误区:不要以为java进程CPU占到398%就是高&#xff0…

MySQL学习笔记12

MySQL 查询语句: 1、查询五子句:(重点) mysql> select */字段列表 from 数据表名称 where 子句 group by 子句 having 子句 order by 子句 limit 子句; 1)where 子句;条件筛选。 2)group…

golang 通过案列感受下内存分析

package main // 声音文件所在的包,每个go文件必须有归属的包 import ("fmt" )// 引入程序中需要用的包,为了使用包下的函数,比如:Printinfunc exchangeNum(num1 int, num2 int){var t intt num1num1 num2num2 t }…

Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 矢量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库…

Cortex-M3/M4之SVC和PendSV异常

一、SVC异常 SVC(系统服务调用,亦简称系统调用)用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它…

2023华为杯数学建模D题第三问-碳排放路径优化(能源消费结构调整的多目标优化模型构建详细过程+模型假设(可复制))

1.碳排放约束下(人为干预按时碳达峰与碳中和的基准情景)能源消费结构多目标优化模型构建 1.1基本假设 本文的模型设计主要基于以下几个基本假设: (1)能源消费结构调整的根本驱动要素,是对投资耗费的最小化…

威胁的数量、复杂程度和扩散程度不断上升

Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查,强调了他们的主要网络安全威胁和担忧…

Java流式编程的使用

流式编程的使用步骤 使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式。 使用filter方法实现过滤条件 例子为下&#xff08;查询年龄大于18的用户&#xff09;: Testpublic void streamTest1() {List<Student> students Arrays.asList(ne…

《JVM》第二篇 JVM内存模型深度剖析与优化

目录 一. JDK体系结构与跨平台特性介绍二. JVM内存模型深度剖析三. 从Jvisualvm来研究下对象内存流转模型四. GC Root与STW机制五. JVM参数设置通用模型 一. JDK体系结构与跨平台特性介绍 二. JVM内存模型深度剖析 按照线程是否共享来划分 TLAB(Thread Local Allocation Buffe…

改写软件-怎么选择改写软件

什么是改写软件&#xff1f;改写软件是基于自然语言处理技术的工具&#xff0c;它们可以分析一段文字&#xff0c;并将其重新表达&#xff0c;以保持原始意义&#xff0c;但使用不同的词汇和结构。这种技术可用于减少内容的重复&#xff0c;增加多样性&#xff0c;或者简化复杂…

Python量化交易学习笔记(0)

本文将简单回顾我的量化交易学习的历程&#xff0c;并给出新手学习量化交易的建议学习路线&#xff0c;适合于尚无稳定盈利策略的量化新手阅读&#xff0c;量化大神们请略过。 本文将在博客中置顶&#xff0c;并不定期根据我的学习、交易进行更新。 回顾学习历程 2020年初接…