js篇之对象数据属性与存取器属性
Posted raindi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js篇之对象数据属性与存取器属性相关的知识,希望对你有一定的参考价值。
在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 get 4 set 5 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 //2 18 obj.n = 0; 19 //Uncaught 请输入一个大于n的值
上面的例子中,使用set函数对n的取值范围进行控制。
以上是关于js篇之对象数据属性与存取器属性的主要内容,如果未能解决你的问题,请参考以下文章