get属性是什么?有什么用?在什么场景用?get会被Json序列化?

在JavaScript中,对象的属性不仅可以是数据属性(即常规的键值对),还可以是访问器属性(accessor properties)。访问器属性不包含实际的数据值,而是定义了如何获取(get)和设置(set)一个值。这些操作由getter和setter函数执行。

get属性(getter)

get是一种定义在对象内部的函数,用于访问某个属性值时返回一个值。当你试图访问该属性时,getter函数会被自动调用。

使用方法:

const obj = {_value: 42,get value() {console.log("Getter is being called!");return this._value;}
};console.log(obj.value); // 输出: "Getter is being called!" 然后输出: 42

get的作用:

  1. 计算属性:当对象的属性值取决于其他属性或某些外部因素时,可以使用getter。
  2. 验证和控制访问:当访问对象的某个属性时,可以使用getter来执行特定的验证或日志操作。
  3. 懒加载:只在首次访问属性时计算其值,并缓存该值以供后续使用。
  4. 代理属性:为对象的其他属性或外部数据源提供别名或特定的访问逻辑。

使用场景示例:

  1. 计算属性

    const circle = {radius: 5,get area() {return Math.PI * this.radius * this.radius;}
    };console.log(circle.area); // 输出圆的面积
    
  2. 控制属性访问

    const person = {_age: 0,get age() {return this._age;},set age(value) {if (value < 0) {console.warn("Age cannot be negative!");} else {this._age = value;}}
    };person.age = -5; // 输出警告: "Age cannot be negative!"
    
  3. 懒加载

    let expensiveObject = {_data: null,get data() {if (!this._data) {console.log("Fetching data...");this._data = "Expensive Data";}return this._data;}
    };console.log(expensiveObject.data); // "Fetching data..." 然后输出: "Expensive Data"
    console.log(expensiveObject.data); // 直接输出: "Expensive Data"(不再"Fetching data...")
    

综上,getter使我们能够对对象属性的访问进行更精细的控制,并提供计算、验证、日志记录、懒加载等功能。

get会被Json序列化?

在JavaScript的JSON序列化过程中,getset 的行为有所不同:

  1. get(getter):当你使用JSON.stringify方法序列化一个对象时,如果该对象的某个属性是通过getter定义的,那么getter会被调用,并且返回的值会被序列化到JSON字符串中。换句话说,getter的结果会被序列化。
const obj = {_value: 42,get value() {return this._value;}
};const jsonString = JSON.stringify(obj); // 输出为'{"_value":42,"value":42}'

如上所示,尽管value属性是通过getter定义的,它的值(由getter返回的值)被正确地序列化到了JSON字符串中。

  1. set(setter):setter在JSON.stringify的序列化过程中不起作用,因为它与特定的值无关。setter只定义了如何设置某个属性的值,而不定义了要序列化的具体值。因此,setter本身不影响序列化的结果。

    const obj = {_value: 42,get value() {return this._value;},set value(val) {this._value = val;}
    };const jsonString = JSON.stringify(obj); // 输出依然为'{"_value":42,"value":42}'
    

总结:在JSON.stringify的序列化过程中,getter会被调用并将其返回的值序列化,而setter则被忽略。

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

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

相关文章

同为科技(TOWE)带热插拔功能机柜PDU插座的应用

所谓热插拔&#xff08;hot-plugging或Hot Swap&#xff09;&#xff0c;即带电插拔&#xff0c;指的是在不关闭系统电源的情况下&#xff0c;将模块、板卡插入或拔出系统而不影响系统的正常工作&#xff0c;从而提高了系统的可靠性、快速维修性、冗余性和对灾难的及时恢复能力…

Sql注入攻击的三种方式

SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL 注…

HVV爆火漏洞:最新 WPS RCE (远程命令执行) 复现

最近HVV爆出的很火的WPS命令执行漏洞&#xff0c;其实并不是0DAY&#xff0c;早在2019年就出现了&#xff0c;只不过最近EXP才公开。接下来我们来复现一遍。 0x00 影响版本 WPS Office 2023 个人版 < 11.1.0.15120WPS Office 2019 企业版 < 11.8.2.12085 0x01 环境配置…

[管理与领导-50]:IT基层管理者 - 8项核心技能 - 5 - 沟通是润滑剂

目录 前言&#xff1a; 一、什么是沟通 1.1 定义 1.2 沟通模型 1.3 沟通的六层次模型 1.4 为什么需要沟通 二、沟通的五维度 三、沟通的原则 3.1 以终为始 3.2 双赢思维&#xff1a;人们只会做对自己有利的事 3.3 牵善的思维 四、沟通的过程 五、沟通技巧 六、深…

【HSPCIE仿真】输入网表文件(1)基本内容和基本规则

输入网表文件 1. 输入网表文件基本内容2. 输入网表文件示例3. 一些基本规则4. 数值表示5. 压缩文件格式的读取6. 参数和表达式 从HSPICE的仿真流程看&#xff0c;出去初始化配置过程&#xff0c;真正的仿真是从输入网表文件开始的。 HSPICE 根据输入网表文件&#xff08; inpu…

【80天学习完《深入理解计算机系统》】第十一天 3.4 跳转指令

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

深度学习7:生成对抗网络 – Generative Adversarial Networks | GAN

生成对抗网络 – GAN 是最近2年很热门的一种无监督算法&#xff0c;他能生成出非常逼真的照片&#xff0c;图像甚至视频。我们手机里的照片处理软件中就会使用到它。 目录 生成对抗网络 GAN 的基本原理 大白话版本 非大白话版本 第一阶段&#xff1a;固定「判别器D」&#x…

element-ui:Vue开发者的最佳伙伴

如果你是一个使用Vue框架开发网页应用的开发者&#xff0c;那么你一定不会想错过element-ui这个优秀的UI组件库。element-ui为你提供了一套完善的设计规范和丰富的组件示例&#xff0c;让你可以快速地构建出美观、高效和易用的页面。在这篇博客中&#xff0c;我将介绍element-u…

基于poi生成excel模板并生成下拉选择框

直接上代码&#xff08;有注释&#xff09; public void downloadImportTemplate(HttpServletResponse response) {try {ServletOutputStream outputStream response.getOutputStream();//创建工作表XSSFWorkbook workbook new XSSFWorkbook();//标题行的标题List<String…

CSS 对象模型

定义&#xff1a; CSS对象模型是一组允许用JavaScript操纵CSS的API&#xff0c;他很像DOM&#xff0c;但针对的是CSS而不是HTML。它允许用户动态地读取和修改CSS样式 CSS的值是没有类型的&#xff0c;也就是使用String对象来表示 下面列一些常用的API 对象&#xff1a; 1. C…

设计模式-适配器模式

核心思想 见名知意&#xff0c;是作为两个不兼容的接口的桥梁&#xff0c;属于结构型模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作 常见的几类适配器 类的适配器模式 想将一个类转换成满足另外一个新接口的类时&#xff0c;可以使用类的适配器模式&#x…

springCloudGateway网关配置

1.配置跨域支持 /*** 跨域支持*/ Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedH…

基于CH552G主控的开源九键小键盘(资料齐全)

Content 1. 前言2. CH55X Arduino平台环境搭建2.1 常规安装2.2 HFS挂载本地服务器安装 3. 例程使用3.1 工程下载及编译3.2 程序烧录 1. 前言 芯片选型&#xff1a;CH552G 本文主要解决Arduino下CH552G芯片包的环境配置问题 开源地址&#xff1a;CV键盘有线小键盘 - 嘉立创ED…

一分钟学会用pygame制作棋盘背景

一分钟一个Pygame案例&#xff0c;这一集我们来学习一下如何生成一个视频中的棋盘背景效果&#xff0c;非常非常简单。 视频教程链接&#xff1a;https://www.bilibili.com/video/BV17G411d7Ah/ 当然我们这里是用来做页面的背景&#xff0c;你也可以拿来做别的效果&#xff0…

fdm-cli,一个致力于管理项目初始化模板的工具脚手架

希望各位可以了解fdm-cli&#xff0c;并在合适的时候尝试使用一下。 阅读本文你将获得 一个&#xff08;好用的&#xff09;项目模板初始化工具这个&#xff08;好用的&#xff09;工具的使用方法给作者点一个 star 的机会 一、不愿再复制粘贴 小N每次在写项目的时候&#x…

vmware禁用内存交换,减少磁盘占用

1、全局禁用交换内存 选择VMware菜单&#xff1a;编辑–>首选项–>内存&#xff0c;选取第一项“调整所有虚拟机内存使其适应预留的主机RAM&#xff08;F&#xff09;”。 设置后虚拟机只使用主机内存&#xff0c;不会读硬盘&#xff08;不使用类似交换文件的形式&#…

php curl apache 超时 500错误

web请求超过40s 就返回500错误 php的超时时间 set_time_limit无效 curl CURLOPT_TIMEOUT 设置请求时间 无效 设置apache Timeout 链接超时 无效 最后添加 Fcgid才可以 apache 配置文件 httpd.conf <IfModule mod_fcgid.c>FcgidProcessLifeTime 10000FcgidIOTimeout 1000…

JVM及垃圾回收机制

文章目录 1、JVM组成&#xff1f;各部分作用&#xff1f;1.1 类加载器&#xff08;Class Loaders&#xff09;1.2 运行时数据区&#xff08;Runtime Data Area&#xff09;1.3 执行引擎&#xff08;Execution Engine&#xff09;1.4 本地方法接口&#xff08;Native Interface&…

百度Apollo学习心得:探索自动驾驶技术的前沿之旅

文章目录 前言一、理论学习与实践结合二、多方资源的整合利用三、团队合作与交流分享四、持续学习与创新思维总结 前言 百度Apollo是一项引领自动驾驶技术发展的开放平台&#xff0c;通过深度学习、感知与决策、定位与控制等关键技术&#xff0c;为开发者提供了丰富的工具和资…

按钮权限控制

搜索关键字&#xff1a; 自定义指令传参| "自定义指令""dataset"|自定义指令dataset| "Vue""directives"|vue按钮权限实现 1、完整代码&#xff1a; <template> <div> <el-breadcrumb separator-class"el-icon…