ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。
数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值。
1.数据属性特性:value、writable、enumerable、configurable。
解释:configurable:true/false,是否可以通过delete删除属性默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
writable:true/false,是否可以修改属性的值,默认false;
value:undefined,设置属性的值,默认undefined。
var person = {};
Object.defineproperty(person,"name",{
writable : false, //修改属性的值为只读(不可修改)
configurable : false; // 设置为不可删除属性
value : "Mr.Chen"
});
alert(person.name); //"Mr.Chen"
person.name = "chen";
alert(person.name);//"Mr.Chen"
2.访问器属性特性:set、get、enumerable、configurable。
解释:configurable:true/false,是否可以通过delete删除属性,默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
set:function,读取属性值时调用的函数;
get:function,修改属性值时调用的函数。
var book = {
_year: 2004,
edition: 1
};
Object.defineProperty(book, "year", {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
alert(book.edition); //2
将属性添加到对象或修改现有属性的特性使用Object.defineProperty() 或 Object.defineproperties()方法;
Object.defineProperty(object, propertyname, descriptor):
参数解释:object:需要添加或修改属性的对象;
propertyname:属性的名称,字符串格式;
descriptor:属性的描述,设置数据属性或访问器属性的特性。