js对象属性

news2025/1/10 21:01:19

在面向对象的语言中有一个标志,那就是都有类,通过类可以创建任意多个相同属性、方法的对象。在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.coloradmin.cn/o/1037695.html

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

相关文章

新版绿豆视频APP视频免授权源码 V6.6插件版

新版绿豆视频APP视频免授权源码 V6.6插件版 简介: 新版绿豆视频APP视频免授权源码 插件版 后端插件开源,可直接反编译修改方便 对接苹果cms,自定义DIY页面布局! 绿豆影视APP对接苹果cms 所有页面皆可通过后端自由定制 此版本后端源码 前…

二叉树创建、前序遍历、中序遍历、后序遍历、层序遍历

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h> #define N 100 typedef char data_t;typedef struct tree {data_t data;//存放本节点数据struct tree* l_child;//存放左孩子节点地址struct tree* r_child;//存放右孩子节点地址 }Tree;Tre…

Zig实现Hello World

1. 什么是zig 先列出一段官方的介绍: Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. 大概意思就是说&#xff1a; Zig是一种通用编程语言和工具链&#xff0c;用于维护健壮、最佳和可重用的软件。 官…

电脑计算机xinput1_3.dll丢失的解决方法分享,四种修复手段解决问题

日常生活中可能会遇到的问题——xinput1_3.dll丢失的解决方法。我相信&#xff0c;在座的很多朋友都曾遇到过这个问题&#xff0c;那么接下来&#xff0c;我将分享如何解决这个问题的解决方法。 首先&#xff0c;让我们来了解一下xinput1_3.dll文件。xinput1_3.dll是一个动态链…

服务注册发现_高可用Eureka注册中心搭建

在微服务架构这样的分布式环境中&#xff0c;我们需要充分考虑发生故障的情况&#xff0c;所以在生产环境中必须对各个组件进行高可用部署&#xff0c;对于微服务如此&#xff0c;对于服务注册中心也一样。 问题&#xff1a; Spring-Cloud为基础的微服务架构&#xff0c;所有的…

vulhub venom

文章目录 靶场环境信息收集ftp服务二、信息利用三、任意文件上传三 sudo提权靶场环境 `vmware 靶场信息:https://www.vulnhub.com/entry/venom-1,701/ 下载地址:https://download.vulnhub.com/venom/venom.zip 新建虚拟机打开下载后的ovf文件 遇见导入失败合规性检查时,重试…

找不到d3dcompiler_43.dll,无法继续执行代码如何解决

d3dcompiler_47.dll 是一个与 DirectX 相关的动态链接库&#xff08;DLL&#xff09;&#xff0c;它包含了 DirectX 图形编译器的一些功能。当您的电脑出现 d3dcompiler_47.dll 丢失的情况时&#xff0c;可能会导致一些基于 DirectX 的游戏或应用程序无法正常运行。下面我们将介…

【刷题笔记9.24】LeetCode:只出现一次的数字

LeetCode&#xff1a;只出现一次的数字 一、题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使…

ImportError: Java package ‘edu‘ not found, requested by alias ‘edu‘

参考issue&#xff1a; https://github.com/ncbi-nlp/NegBio/issues/44 我目前的解决办法 pip uninstall jpype1 -y可以成功运行。

CCNP-OSPFv3

现在在企业中&#xff0c;用的IPv4居多&#xff0c;在我们的手机上&#xff0c;数据中心&#xff0c;运营商以及一些大企业用的都是IPv6&#xff1b; 为啥用IPv6啊&#xff0c;因为IPv4地址不够用&#xff0c;IPv4地址只有32bit&#xff0c;而IPv6足足有128bit&#xff1b; 那…

【23-24 秋学期】 NNDL 作业2

习题2-1 分析为什么平方损失函数不适用于分类问题&#xff0c;交叉熵损失函数不适用于回归问题 平方损失函数 平方损失函数&#xff08;Quadratic Loss Function&#xff09;经常用在预测标签&#x1d466;为实数值的任务中 表达式为&#xff1a; 交叉熵损失函数 交叉熵损失函…

RGB-D转3D点云原理及实现代码

在图像处理和计算机视觉领域&#xff0c;RGBD 是指结合图像颜色和深度信息的数据格式。文本介绍如何使用Python将RGBD数据转换为3D点云&#xff0c;可以使用 NSDT 3DConvert 在线查看3D点云或者进行格式转换&#xff1a; 1、RGBD 颜色深度 缩写 RGB 代表三基色通道&#xf…

Unity中Shader用到的向量的乘积

文章目录 前言一、向量的乘法1、点积2、差积 二、点积&#xff08;结果是一个标量&#xff09;1、数学表示法2、几何表示法 三、叉积1、向量叉积的结果 与 两个相乘的向量互相垂直2、判断结果正负方向的方法&#xff1a;右手法则 前言 Unity中Shader用到的向量的点积 一、向量…

华为OD机试 - 最小传输时延 - 深度优先搜索DFS(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明计算源节点1到目的节点5&#xff0c;符合要求的时延集合 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&…

Gnomon绑定基础(约束 IK 节点)

点约束 方向约束 父约束 目标约束 修改后 对象方向 IK控制柄 直的骨骼&#xff0c;指定IK怎么弯曲 直的骨骼&#xff0c;指定IK怎么弯曲 样条曲线 数学节点 乘除节点 混合节点 注意

免杀对抗-无文件落地分离拆分-文本提取+加载器分离+参数协议化+图片隐写

无文件落地&分离拆分 无文件落地&分离拆分其实就是内存免杀&#xff0c;内存免杀是将shellcode直接加载进内存&#xff0c;由于没有文件落地&#xff0c;因此可以绕过文件扫描策略的查杀。为了使内存免杀的效果更好&#xff0c;在申请内存时一般采用渐进式申请一块可读…

Mysql数据库SQL语句与管理

Mysql数据库基本语句与管理 1、常用的数据类型2、数据库管理3、SQL语句3.1语言分类3.2sql语句 4、DQL查询数据记录4.1查询4.2修改4.3删除4.4alter修改 5、总结 1、常用的数据类型 数据类型 &#xff08;1&#xff09;int&#xff1a;整型 用于定义整数类型的数据 &#xff08;…

使用Spring Boot和MyBatis访问数据库

使用Spring Boot和MyBatis访问数据库 Spring Boot和MyBatis是Java开发中非常流行的框架&#xff0c;它们可以帮助你轻松地构建和管理数据库应用程序。本文将介绍如何使用Spring Boot和MyBatis访问数据库&#xff0c;并提供示例代码以帮助你入门。 准备工作 在开始之前&#x…

什么是FMEA(失效模式和影响分析)?

失效模式和影响分析&#xff08;FMEA&#xff09;是一个在开发阶段&#xff0c;用于确定产品或流程可能的风险和失败点的有条理的过程。FMEA团队会研究失效模式&#xff0c;也就是产品或流程中可能出错的地方&#xff0c;以及这些失效可能带来的影响&#xff08;如风险、损害、…

小程序如何关联公众号来发送模板消息

有时候我们可能需要通过公众号来发送一些小程序的服务通知&#xff0c;比如订单提醒、活动通知等。那么要如何操作呢&#xff1f; 1. 有一个通过了微信认证的服务号。需要确保小程序和公众号是同一个主体的。也就是说&#xff0c;小程序和公众号应该都是属于同一个企业。如果还…