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

这篇具有很好参考价值的文章主要介绍了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则被忽略。文章来源地址https://www.toymoban.com/news/detail-677991.html

到了这里,关于get属性是什么?有什么用?在什么场景用?get会被Json序列化?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS处理json,序列化和反序列化

    Mantle 是一个开源的 Objective-C 框架,用于在 iOS 和 macOS 应用程序中实现模型层的序列化和反序列化。它提供了一种简单而强大的方式来将 JSON数据格式转换为自定义的数据模型对象,以及将数据模型对象转换为字典或 JSON 格式。 Mantle具有如下特点 自动映射 Mantle自动将 JSON 数据

    2024年02月11日
    浏览(60)
  • rust学习-json的序列化和反序列化

    由于 serde 库默认使用 JSON 格式进行序列化和反序列化 因此程序将使用 JSON 格式对数据进行序列化和反序列化 JSON:广泛使用的 JavaScript 对象符号,用于许多 HTTP API Postcard:no_std 和嵌入式系统友好的紧凑二进制格式。 CBOR:用于小消息大小且无需版本协商的简洁二进制对象表示

    2024年02月12日
    浏览(38)
  • 【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )

    当谈到网络编程时,序列化和反序列化是非常重要的概念。在上一篇文章中,我们已经了解了在Linux环境下实现简单的TCP网络程序的基础知识。本文将继续探讨序列化和反序列化,这些概念对于在网络上传输数据以及跨网络通信至关重要。通过深入了解序列化和反序列化,我

    2024年04月08日
    浏览(85)
  • JSON序列化与反序列化NULL值丢失问题

    做项目一般都会有一些特殊的需求,例如保留json中的null值,但是fastjson都会把null值得属性给过滤掉 json序列化保留null值 json反序列化保留null值 使用hutool的Json工具时

    2024年02月15日
    浏览(59)
  • 使用nlohmann json库进行序列化与反序列化

    nlohmann源码仓库:https://github.com/nlohmann/json 使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可 demo

    2024年02月10日
    浏览(36)
  • 【网络】协议的定制与Json序列化和反序列化

    我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 建立链接和断开链接 基于TCP协议,我们需要知道写代码时对应的接口大概在TCP通讯的过程中属于什么样的时间点角色,在TCP协议时详谈。三次握手,四次挥手 listen状态:准备好了,可以进

    2024年02月09日
    浏览(38)
  • 【网络编程】协议定制+Json序列化与反序列化

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、序列化与反序列化的概念 二、自定义协议设计一个网络计算器 2.1TCP协议,如何保证接收方收到了完整的报文呢?

    2024年02月06日
    浏览(54)
  • Untiy Json和Xml的序列化和反序列化

    Ps: Unity C# Json 序列化换行 效果: 引用:

    2024年02月13日
    浏览(44)
  • ASP.NET中JSON的序列化和反序列化

      JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。

    2024年02月15日
    浏览(33)
  • Go的json序列化与反序列化(Marshal与Unmarshal)

    参考博客:Go的json序列化:Marshal与Unmarshal-CSDN博客

    2024年04月27日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包