首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 实现 set get

在JavaScript中,setget 是两种特殊的函数,它们通常用于定义对象属性的存取器(accessor properties)。这些存取器允许你在获取(get)或设置(set)属性值时执行自定义逻辑。

基础概念

  • Getter(获取器): 当尝试读取属性值时自动调用的函数。
  • Setter(设置器): 当尝试写入属性值时自动调用的函数。

优势

  1. 封装: 可以隐藏对象内部的状态,只通过特定的接口暴露必要的功能。
  2. 验证: 在设置属性值时可以进行验证,确保数据的有效性。
  3. 计算属性: 可以基于其他属性动态计算得出属性值。

类型

  • 属性存取器: 使用 getset 关键字定义的属性。
  • 方法存取器: 可以通过普通函数实现,但通常使用属性存取器语法更为简洁。

应用场景

  • 数据验证: 在设置属性值之前进行检查。
  • 日志记录: 记录属性值的变化。
  • 计算属性: 根据其他属性动态计算当前属性的值。

示例代码

代码语言:txt
复制
const person = {
  firstName: 'John',
  lastName: 'Doe',
  
  // Getter for fullName
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  
  // Setter for fullName
  set fullName(value) {
    const parts = value.split(' ');
    this.firstName = parts[0];
    this.lastName = parts[1] || '';
  }
};

console.log(person.fullName); // 输出: John Doe

person.fullName = 'Jane Smith';
console.log(person.firstName); // 输出: Jane
console.log(person.lastName);  // 输出: Smith

遇到的问题及解决方法

问题1: Getter 和 Setter 不触发

原因: 可能是因为直接修改了对象的底层属性,而不是通过存取器。

解决方法: 确保总是通过存取器来访问和修改属性。

问题2: Setter 中的逻辑错误

原因: 在设置器中可能包含了错误的逻辑,导致属性值没有正确更新。

解决方法: 仔细检查 setter 中的逻辑,并添加必要的调试信息来追踪问题。

问题3: Getter 返回 undefined

原因: 可能是因为 getter 函数中没有返回任何值。

解决方法: 确保 getter 函数中有明确的返回语句。

总结

使用 setget 可以让我们在JavaScript对象上创建更加灵活和强大的属性。它们不仅提供了数据封装的能力,还允许我们在属性值变化时执行额外的逻辑,如验证和日志记录。正确使用这些特性可以大大提高代码的可维护性和健壮性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • python的__get__、__set

    默认的属相访问是从对象的字典中 get, set, 或者 delete 属性,;例如a.x的查找顺序是:     a.x -> a.__dict__['x'] -> type(a)....__get__(self, obj, type=None) -> value descr.__set__(self, obj, value) -> None descr....,如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用,实现只读数据描述符,同时定义__get__()和__set__(),在__set__()中抛出AttributeError...__get__(b, type(b)) .优先级顺序:     数据描述符 > 实例变量 > 非数据描述符,__getattr__()具有最低优先级(如果实现了的话),C语言的实现可以在 Objects...,继承object的类自动实现或者他们有一个元类提供类似的功能,同样,重载 __getattribute__()可以停止描述符的调用 描述符例子     下面的代码创建了一个类,每次访问get或者set

    1.3K20

    用Lombok甩掉get()和set()

    02 — 传统set和get方法 既然是实体,里面少不了要定义变量,而实体变量的值的设置和获取,由set()和get()方法实现。...标准set和get方法定义如下: public class peopleDao { private Long id; private Integer age; private String...可以看到满篇的set和get方法,如果一个实体有20个变量或以上,那么整个class看起来就会非常长而且臃肿。既没有技术含量,又影响着代码的美观。要增加或修改的时候变得麻烦和易错。...而且set和get方法,也存在线程同步问题... 02 — 使用lombok Lombok是一种自动接通你的编辑器和构建工具的一个Java库。...只是通过简单的@Getter @Setter 注解便可以实现变量的set和get方法,除此外还有@ToString、@NoArgsConstructor (构造函数)等,诸多注解供你使用,为你节省大量宝贵时间和代码提高开发效率

    51920

    js中Set基本使用

    ECMAScript 6 新增的 Set 是一种新集合类型,为这门语言带来集合数据结构。Set 在很多方面都像是加强的 Map,这是因为它们的大多数 API 和行为都是共有的。 基本API 1....创建Set实例 使用 new 关键字和 Set 构造函数可以创建一个空集合: const s = new Set(); 如果想在创建的同时初始化实例,则可以给 Set 构造函数传入一个可迭代对象,其中需要包含插入到新集合实例中的元素...(Set 可以包含任何 JavaScript 数据类型作为值): const s = new Set(["val1", 1, true, {}, undefined, function fun() {}...]); 注意:Set结构不会添加重复的值 const s = new Set([1, 1, 2, 3, 4, 4, 5, 6, 7, 4, 2, 1]); Array.from(s); // [1,...Set实例转数组 const s = new Set([1, 2, 3]); Array.from(s); // [1, 2, 3] 3. size属性 size: 获取Set实例的元素个数: const

    2.6K30
    领券