博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js篇之对象数据属性与存取器属性
阅读量:6633 次
发布时间:2019-06-25

本文共 1179 字,大约阅读时间需要 3 分钟。

在ECMAScript中,对象属性值可以用一个或两个方法代替,这两个方法就是getter和setter。由getter与与setter定义的属性叫做‘存取器属性’。当程序查询存取器属性的值时,js调用getter方法(无参数),这个方法返回的值就是属性存取表达的值。当程序设置一个存取器属性的值时,调用的是setter方法。

属性特性

数据属性的四个特性:值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable)

存取器属性的四个特性:读取(get)、写入(set)、可枚举性、可配置性。

使用Object.defineProperty()先来直观的感受一下这两者的不同:

使用Object.defineProperty()对数据属性进行设置的方法如下

1 var obj = {};2 Object.defineProperty(obj, "prop", {3 value: 1,4 writable: true, //可写性5 enumerable: true, //可枚举性6 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改7 })

使用Object.defineProperty()对存储器属性的设置方法如下

1 var obj = {};2 Object.defineProperty(obj, "prop", {3 get4 set5 enumerable: true, //可枚举性6 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改7 })

存储器属性与数据属性最大的不同就是增加了getter/setter,通过它们可以对属性的值进行操作,可以实现一些实用的功能。

1 //example1 2 function serialnum() { 3 var n =1;  4 var prop = null; 5 Object.defineProperty(this, "n", { 6 get: function() { 7 return n; 8 }, 9 set: function(value) {10 if(value > n) n = value;11 else throw '请输入一个大于n的值';12 }13 })14 }15 var obj = new serialnum();16 obj.n = 2;17 //218 obj.n = 0;19 //Uncaught 请输入一个大于n的值

上面的例子中,使用set函数对n的取值范围进行控制。

 

转载于:https://www.cnblogs.com/raind/p/9026759.html

你可能感兴趣的文章
Linux下tomcat修改成的80端口无法访问
查看>>
为了好好看球,学霸们用深度学习重建整个比赛3D全息图
查看>>
CentOS双机中Docker下安装Mysql并配置互为主从模式
查看>>
sql in not in 案例用 exists not exists 代替
查看>>
WEB前端资源代码:学习篇
查看>>
怎样获取Web应用程序的路径
查看>>
xcode crash 查找 EXC_BAD_ACCESS 问题根源的方法
查看>>
使用java.util.concurrent.ThreadFactory来创建线程
查看>>
中国大数据科技传播联盟在京成立
查看>>
oracle 体系结构
查看>>
Nginx+Keepalived搭建高可用负载均衡集群
查看>>
VS2015 正式版中为什么没有了函数前面引用提示了?
查看>>
arp协议的混乱引发的思考--一个实例
查看>>
配置XenDesktop一例报错-序列不包含任何元素
查看>>
javascript理解数组和数字排序
查看>>
微软同步框架入门之五--使用WCF同步远程数据
查看>>
Last-Modified、If-Modified-Since 实现缓存和 OutputCache 的区别
查看>>
C# WinForm控件之Dock顺序调整
查看>>
NSPredicate过滤数组数据
查看>>
spark 数据预处理 特征标准化 归一化模块
查看>>