JavaScript的setter与getter方法


Posted in Javascript onNovember 29, 2017

以前在写项目过程一直都没有使用过Javascript的setter与getter方法,所以对其是一种要懂不懂的概念;今天看书看到这个知识点,还是模模糊糊的,于是就打算研究研究;

Javascript对象的属性是由名字,值和一组特性构成的。那么首先,来了解一下对象的两种属性:

数据属性,我们经常使用,应该很熟悉
访问器属性,也称存取器属性

何为存取器属性?就是一组获取和设置值的函数。在ECMAScript5中,属性值可以用一个或两个方法设置,这两个方法就是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

通过上面的代码可以看出,其中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

另外,存取器属性也是可以被继承的;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跨浏览器开发经验总结(四) 怎么写入剪贴板
May 13 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
Javascript实现获取及设置光标位置的方法
Jul 21 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
JS获取随机数和时间转换的简单实例
Jul 10 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
vue底部加载更多的实例代码
Jun 29 Javascript
详解vue文件中使用echarts.js的两种方式
Oct 18 Javascript
解析Vue 2.5的Diff算法
Nov 28 #Javascript
javascript+css3开发打气球小游戏完整代码
Nov 28 #Javascript
9种改善AngularJS性能的方法
Nov 28 #Javascript
JS异步函数队列功能实例分析
Nov 28 #Javascript
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 #Javascript
JS+HTML+CSS实现轮播效果
Nov 28 #Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
Nov 28 #Javascript
You might like
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python使用剪切板的方法
2017/06/06 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python多进程原理与用法分析
2018/08/21 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Python之多进程与多线程的使用
2021/02/23 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
linux面试题参考答案(4)
2014/09/21 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
团队队名口号大全
2014/06/06 职场文书
物业管理专业求职信
2014/06/11 职场文书
项目战略合作意向书
2015/05/08 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫