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

js 变量 get set

在JavaScript中,getset是对象属性的访问器描述符,它们允许你定义一个属性的读取(get)和写入(set)行为。这些访问器描述符通常用于实现数据封装和验证,以确保对象的状态始终保持有效。

基础概念

  • Getter(获取器):当尝试读取属性值时,会调用getter函数。它不接受任何参数,并且应该返回一个值。
  • Setter(设置器):当尝试写入属性值时,会调用setter函数。它接受一个参数,即要设置的值。

优势

  1. 封装:通过getter和setter,可以将对象的内部状态隐藏起来,只暴露有限的接口。
  2. 验证:可以在setter中添加逻辑来验证传入的值是否有效,从而防止无效数据被写入对象。
  3. 计算属性:getter可以用来计算并返回一个基于其他属性的值,而不是存储一个实际的值。

类型

  • 数据属性:具有值的属性,可以通过赋值直接修改。
  • 访问器属性:具有getter和/或setter的属性,不能直接赋值。

应用场景

  • 数据验证:在设置属性值之前进行检查。
  • 日志记录:记录属性何时被读取或修改。
  • 计算属性:基于其他属性动态计算出的值。

示例代码

代码语言:txt
复制
const person = {
  firstName: 'John',
  lastName: 'Doe',
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
  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

遇到的问题及解决方法

问题:为什么setter没有按预期工作?

原因:可能是由于setter函数的实现不正确,或者在调用setter时传递了错误的参数。

解决方法:检查setter函数的逻辑,确保它正确地处理传入的值,并且在调用setter时传递了正确的参数。

问题:如何确保getter和setter的正确性?

解决方法:编写单元测试来验证getter和setter的行为是否符合预期。例如,可以测试getter是否返回了正确的值,以及setter是否正确地更新了内部状态。

注意事项

  • 使用getset时,属性名必须是字符串或符号。
  • 在对象字面量中定义访问器属性时,不能使用:语法,而应该使用getset关键字。

通过上述信息,你应该能够理解JavaScript中getset的基本概念、优势、应用场景,以及如何解决可能遇到的问题。

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

相关·内容

  • 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...唯一不同之处,就是第一个参数用来表示对象实例,python约定,实例引用可以使self或者this或者其他变量名称     为了支持方法调用,函数通过__get__()方法来实现属性访问时的方法绑定

    1.3K20

    用Lombok甩掉get()和set()

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

    51920

    C# get 、set、索引器

    get 与 set ----   C#类的属性有公有属性(public)和私有属性(private)。如果直接将一个属性声明为public,则该类的任意实例可以随意获取或修改该属性的值,很不安全。....NET Framework中,我们使用get关键字来获取一个公有属性的值,而使用set来设置一个公有属性的值。而在get或set中,可以编写代码来控制对属性值的获取和修改。...public int Port{get; set;} }   注意:   get和set可以根据实际需要而出现其中一个,不一定两个都要出现。   ...//只有get属性,没有设置set属性 { return (GetDay(day)); } } } 索引器的用途 ----   索引器的行为的声明在某种程度上类似于属性...就像属性,可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。

    1.1K30

    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
    领券