JS中的getter和setter

对象有两种属性:(1)数据属性,就是我们经常使用的属性(2)访问器属性,也称存取器属性

存取器属性就是一组获取和设置值的函数。在ECMAScript5中,属性值可以getter和setter方法获取和设置,因此getter和setter定义的属性被称为存取器属性。getter负责获取值,它不带任何参数。setter负责设置值,在它的函数体中,一切的return都是无效的。

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

在对象内如果设置了存取器属性,如果某一变量只声明了getter方法,那么它仅仅只可读而不可写。如果只声明了setter方法,那么读到的该变量值永远都是undefined。

//只声明getter方法时不能通过getter方法来改变变量值
var obj = {
  a: 3,
  b: 8,
  get val() {
    return this.a;
  }
}

console.log(obj.val);     //3
obj.val= 100;
console.log(obj.val); //3

//只声明setter方法时不能获取变量的值
var obj = {
  a: 3,
  b: 8,
  set val(n) {
    this.a = n;
  }
}
console.log(obj.val);     //undefined
obj.val= 100;
console.log(obj.val); //undefined
console.log(obj.b);  //8   其他变量不受影响

//同时声明两种方法
var obj = {
  a: 3,
  b: 8,
  get val(){
    return this.a;
  },
  set val(n) {
    this.a = n;
  }
}
console.log(obj.val);     //3
obj.val= 100;
console.log(obj.val); //100

setter和getter方法在定义时并未用function关键字,事实上这里的get或set,你可以理解为两种不同状态下的function:包容的一面(写),安全的一面(读)。当不通过存取器属性而是直接按平时习惯拿数据属性时,获取和设置都不受影响,或许这两个方法时为了以后的安全设计的吧。

原文地址:https://www.cnblogs.com/wenxuehai/p/10333987.html

时间: 2024-11-05 18:29:59

JS中的getter和setter的相关文章

js中的访问器属性中的getter和setter函数实现数据双向绑定

嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来实现的.本篇文章就着重解析这两个函数的工作原理. 首先,我们先创建一个a对象,并给他定义了一个默认的属性_b,_b前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性. var a={ _b=5;}; 接着定义一个属性为'c'的访问器属性,该属性包含一个get和set函数,get函数用来

Eclipse中generate getter and setter对boolean的反应

有点意思 , 如果变量是boolean类型的  ,就会生成isxxx开头的getter方法 , 但如果是Boolean对象的 , 就会生成getterxx开头的getter对象. 例如 Boolean notToday; boolean notTommorrow; 就会生成 getNotToday().... isNotTommorrow()....

js对象的getter和setter

1 var person = { 2 _country: "中国", 3 set country(country_name) { 4 console.log("设置属性值时可以做一些操作"); 5 this._country = country_name; 6 }, 7 get country() { 8 console.log("获取属性值时可以做一些操作"); 9 return this._country; 10 } 11 }; 12 13

Android Studio中getter和setter模版配置

设置Getter和Setter模版可以参考as里面自带模版,下面给出我自己使用的模版 1.在as菜单栏中的Code-->Generate(Atl+Inset)-->弹出面板中选择Getter and Setter 2.点击Getter Templete后面的图标,弹出如下面板 3.点击+添加一个自己的模版,将下面代码复制到新建的面板然后保存即可 public ## #if($field.modifierStatic) static ## #end $field.type ## #set($na

Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)

在Java类中,getter和setter方法占了很大的比重.由于Java中没有定义属性的关键字:因此,getter和setter方法用于获得和设置Java类的属性值:如getName和setName方法用于设置name属性的值.如果某个属性只有getter方法,那这个属性是只读的:如果只有setter方法,那么这个属性是只写的.在Socket类中也有很多这样的属性来获得和Socket相关的信息,以及对Socket对象的状态进行设置. 一.用于获得信息的getter方法 我们可以从Socket对

好程序员web前端学习路线之在JavaScript中使用getters和setter

好程序员web前端学习路线之在JavaScript中使用getters和setter,大多数面向对象的编程语言都存在getter和setter,包括JavaScript.它们是代码构造,可帮助开发人员以安全的方式访问对象的属性.使用getter,您可以从外部代码访问("获取")属性的值,而setter允许您更改("设置")它们的值.我们将向您展示如何在JavaScript中创建getter和setter. JavaScript对象可以具有多个属性和存储的静态数据和动

《JS权威指南学习总结--6.6属性getter和setter》

内容要点: 一.对象属性 对象属性是由名字.值和一组特性构成的.在ES5中,属性值可以用一个或两个方法替代,这两个方法就是getter和setter.由getter和setter定义的属性称做 "存储器属性",它不同于 "数据属性",数据属性就是一个简单的值. 当程序查询存取器属性的值时,JS调用getter方法(无参数).这个方法的返回值就是属性存取表达式的值. 当程序设置一个存取器属性的值时,JS调用setter方法,将赋值表达式右侧的值当做参数传入setter

JavaScript中闭包实现的私有属性的getter()和setter()方法

注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>闭包</title> </head> <body> <script type="text/javascript"> /** * 利用闭包实现 * 这个函数给对象o增加了属性存储器方法 * 方法名称为ge

ECMAScript5中的对象存取器属性:getter和setter

显然这是一个无关IE(高级IE除外)的话题,尽管如此,有兴趣的同学还是一起来认识一下ECMAScript5标准中getter和setter的实现.在一个对象中,操作其中的属性或方法,通常运用最多的就是读(引用)和写了,譬如说o.get,这就是一个读的操作,而o.set = 1则是一个写的操作.事实上在除ie外最新主流浏览器的实现中,任何一个对象的键值都可以被getter和setter方法所取代,这被称之为“存取器属性”. 毫无疑问,getter负责查询值,它不带任何参数,setter则负责设置键