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) 正式发布该协议之前支持该更新的公司之一。这意味着乐鑫在低功耗蓝牙无线…

排序:冒泡排序算法分析

1.交换排序 基于“交换”的排序︰ 根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。 交换排序包括冒泡排序和快速排序。 2.冒泡排序 1.算法原理 从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即 A [ i − 1 ] > A [ i ] A[i-1]&…

【Java 基础篇】Java Stream 流详解

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

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

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

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

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

hot100-哈希

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按…

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

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

AttributeError: type object ‘mmap.mmap‘ has no attribute ‘ACCESS_READ

在使用mmap时,运行项目,出现了报错:AttributeError: type object ‘mmap.mmap’ has no attribute ACCESS_READ 源代码是这样的: with mmap(f.fileno(), lengthfile_size, accessmmap.ACCESS_READ) as data 此时我的头文件引用是…

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

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

RabbitMQ用户命令_策略_日志

RabbitMQ相关安装 Centos离线安装RabbitMQ并开启MQTT Docker安装rabbitMQ RabbitMQ集群搭建和测试总结_亲测 Docker安装RabbitMQ集群_亲测成功 RabbitMQ创建管理员命令 #查看当前用户命令: rabbitmqctl list_users#创建用户和密码 rabbitmqctl add_user admin…

Zookeeper(window)安装

1、规划 版本选定 :3.4.6 安装目录 : D:\\zookeeper-3.4.6 数据目录 : D:\\zookeeper-3.4.6\\zk_data 日志目录 :D:\\zookeeper-3.4.6\\log 2、下载

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 发出对系统服务函数的呼叫请求,以这种方法调用它…

多台服务器sessionId共享

目录 多台服务器sessionId共享解决方案:ASP.NET Core 参考代码(NET 7):登录处理登录(请求)过滤器过滤器使用BaseController 多台服务器sessionId共享 session id是服务器首次与浏览器创建连接时,生成的id值,存入浏览器…