js中getter和setter用法实例分析


Posted in Javascript onAugust 14, 2018

本文实例讲述了js中getter和setter用法。分享给大家供大家参考,具体如下:

在学习Vue计算属性时,有一句“计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter”。

getter和setter到底是什么?于是我查找了资料:

在Es5中可以使用getter和setter部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。getter是一个隐藏函数,会在获取属性值时调用。setter也是一个隐藏属性,会在设置属性值时调用。

例子:

var myObject = {
  get a(){
    return 2
  }
  };
  Object.defineProperty(
  myObject,       //目标对象
  "b",          //属性名
  {  //描述符
    //给b设置一个getter
    get:function(){
    return this.a*2
     },
    //确保b会出现在对象的属性列表中
    enumerable:true
  }
);
console.log(myObject.a) //2
console.log(myObject.b) //4

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,测试结果如下:

js中getter和setter用法实例分析

不管是对象文字语法中的get a( ) { ...... },还是defineProperty(......)中的显式定义,二者都会在对象中创建一个不包含值的属性,对于这个属性的访问会自动调用一个隐藏函数,它的返回值会被当作属性访问的返回值。(也就是说myObject.a不用加执行括号,vue中计算属性默认有getter,调用计算属性不用在后面加"( )")

var obj = {
  //给a定义一个getter
  get a(){
  return 2;
  }
};
obj.a = 3;
console.log(obj.a); //2

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun,测试结果如下:

js中getter和setter用法实例分析

由于对a只定义了getter,所以对a的set操作会忽略赋值操作,不会抛错。而且即便有合法的setter,由于我们自定义的getter只会返回2,所以set操作是没有意义的。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
使用JS进行目录上传(相当于批量上传)
Dec 05 Javascript
如何用ajax来创建一个XMLHttpRequest对象
Dec 10 Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
jQuery使用each方法与for语句遍历数组示例
Jun 16 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
ionic选择多张图片上传的示例代码
Oct 10 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 Javascript
JS运算符简单用法示例
Jan 19 Javascript
Antd中单个DatePicker限定时间输入范围操作
Oct 29 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 #Javascript
Vue.js单向绑定和双向绑定实例分析
Aug 14 #Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 #Javascript
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 #jQuery
jQuery+CSS实现的标签页效果示例【测试可用】
Aug 14 #jQuery
layui的table单击行勾选checkbox功能方法
Aug 14 #Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 #Javascript
You might like
php判断两个浮点数是否相等的方法
2015/03/14 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
javascript 写类方式之七
2009/07/05 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
vue.js表格分页示例
2016/10/18 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[00:14]护身甲盾
2019/03/06 DOTA
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
为什么python比较流行
2020/06/19 Python
Python如何定义接口和抽象类
2020/07/28 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
求网格中的黑点分布
2013/11/06 面试题
产品促销活动策划书
2014/01/15 职场文书
团日活动总结书
2014/05/08 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书