ECMAScript中有两种属性:数据属性和访问器属性
1.数据属性
数据属性是包含一个数据值的位置。
数据属性有四个描述其行为的特性:
[[Configurable]]:(可配置)能否通过delete删除属性,能否修改属性特性,能否将属性改为访问器属性;
[[Enumerable]]:(可枚举)能否通过for-in循环返回属性;
[[Writable]]:能否修改属性值;
[[Value]]:保存着属性值;
要修改属性默认特性,必须使用ECMAScript5中的Object.defineProperty(属性所在对象,属性名字,特性描述符)方法
var person={}; Object.defineProperty(person,"name",{ configurable:false, //person对象的name属性不可配置 value:"joy" //name属性值设置为joy }); alert(person.name);//joy delete person.name;//删除无效 alert(person.name);//joy
注意:将configurable设置为false后就不能再设为true了(可配置设为不可配置后就不能变回可配置了)
var person={}; Object.defineProperty(person,"name",{ configurable:false, //person对象的name属性不可配置 value:"joy" //name属性值设置为joy }); Object.defineProperty(person,"name",{ configurable:true //can‘t redefine non-configurable property "name" }); alert(person.name);//joy delete person.name;//删除无效 alert(person.name);//joy
2.访问器属性
访问器属性不包含属性值,它包含一对getter,setter函数.
让两个属性建立关联,即设置一个属性的值会导致其他属性的值发生变化.
四个特性:
[[configurable]]:(可配置)能否通过delete删除属性,能否修改属性特性,能否修改为数据属性;
[[Enumerable]]:(可枚举)能否通过for-in循环返回属性
[[get]]:读取属性时调用
[[set]]:写入属性时调用
var person={ _name:"joy" //下划线开头用来表示只能通过对象方法来访问的属性 }; Object.defineProperty(person,"name",{ get:function(){ return this._name; }, set:function(newValue){ this._name=newValue; } }); person.name="xiaoming"; alert(person.name);//xiaoming
注:其实不太明白为什么要使用访问器属性
原文:http://www.cnblogs.com/hg0209/p/5332355.html