JavaScript存取器属性详解:getter与setter的使用方法

作者:代码拾荒

时间:2026-10-22

浏览:256

本文深入解析JavaScript中的存取器属性(accessor properties),重点讲解ES5标准下的getter和setter方法。通过具体代码示例,阐述如何定义无参返回的getter和有参无返回的setter,以及结合两者实现数据验证与计算。同时演示存取器属性在对象继承中的行为,帮助开发者掌握安全访问对象属性的技巧。

文章目录

JavaScript存取器属性概述

在以往的项目开发中,我很少直接使用JavaScript的setter与getter方法,因此对这一概念仅停留在模糊理解的层面。直到最近阅读相关技术书籍时再次遇到该知识点,为了彻底厘清其原理,我决定对其进行深入研究与梳理。

在JavaScript中,对象的属性由名称、值以及一组特性(attributes)共同构成。理解这一基础结构是掌握属性操作的关键,接下来我们将重点探讨对象属性的两种主要类型。

第一种是数据属性(data property),这是我们在日常开发中最常接触的形式,大家对其特性应该比较熟悉。第二种则是访问器属性,也被称为存取器属性(accessor property)。

getter与setter的定义与特性

所谓存取器属性,本质上是一组用于获取和设置值的函数。在ECMAScript 5规范中,属性值可以通过一个或两个特定的方法来定义,这两个方法分别被称为getter和setter。因此,由getter和setter定义的属性被统称为存取器属性。


var o = {
  get val(){
    /*函数体*/
    return ;
  },
  set val(n){
    /*函数体*/
  }
}

上述示例展示了定义存取器属性的最简形式。可以看出,getter和setter方法在功能上实际上取代了传统的function定义方式,提供了更语义化的属性访问接口。


var o = {
  a:3,
  get val(){
    return Math.pow(this.a,2);
  }
}

console.log(o.val);//9
o.val = 100;
console.log(o.val);//9

getter方法的特点是无参数且必须有返回值。当仅定义getter方法时,该属性只能用于读取值,无法进行赋值操作,这种机制有效地保障了数据的安全性,防止外部意外修改内部状态。


var o = {
  a:3,
  set val(n){
    this.a = n;
  }
}

console.log(o.val);//undefined

setter方法则是有参数且没有返回值。如果仅单独定义setter方法,则该属性只能用于赋值,无法读取其当前值,这通常用于处理需要副作用或验证的赋值逻辑。


var o ={
  a:3,
  get val(){
    return Math.pow(this.a,n);
  },
  set val(n){
    this.a = Math.max(this.a,n);
  }
}

console.log(o.a);//3
console.log(o.val);//9
o.val = 10;
console.log(o.a);//10
console.log(o.val);//100

存取器属性的继承与应用

通过观察上述代码示例可以发现,在getter和setter内部,关键字this始终指向定义该方法的对象实例(即代码中的变量o)。


var o ={
   a:3,
  get val(){
    return Math.pow(this.a,n);
  },
  set val(n){
    this.a = Math.max(this.a,n);
  }
}

o.val = 10;
var foo = Object.create(o);
console.log(foo.val);//10
foo.val = 9;
console.log(foo.val);//10

此外,存取器属性具备继承特性,子对象可以访问父对象定义的getter和setter方法。

以上就是本文关于JavaScript存取器属性的全部内容,希望这些解析能对各位的学习有所帮助,也欢迎大家继续支持本站获取更多技术分享。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章