javascript的对象有两种属性:数据属性和访问器属性。
数据属性包含一个数据值的位置,在这个位置能够进行读写操作。数据属性有四个描述:
1、[[Configurable]],设定属性是否可配置,例如是否该可以被delete删除,是否可以重新定义属性等。默认值是true。
2、[[Eumerable]],设置属性是否可以通过for/in枚举,默认值是true。
3、[[Writable]],设置属性是否可写。默认值为true。
4、[[Value]].属性值。
直接在对象上定义的属性的前三个特征的值都为true,最后一个Value的值就是属性的值。
object.defineProptype()方法
object.defineProptype()方法可以用于配置属性的特征。这个方法接受三个参数,第一个 属性所在的对象,属性的名字和一个描述符对象。
例如:
object.defineProptype(person,'name',{
writable:false,
value:"luck"
});
当调用该方法,但不指定configuration.writable,enumerable 的属性的时候,这三个值都为false。
当设定configuration的值为false的时候,再次调用该方法设置configuration值,会抛出错误,因为此时是不可配置的。
object.defineProptype(person,'name',{
configuration:false,
value:"luck"
});
访问器属性不包含数据值,包含两个可选的函数:setter和getter。
getter用于读取访问器的属性,setter用于写入和处理属性,访问器属性有以下四个特征:
1、[[Configurable]],设定属性是否可配置,例如是否该可以被delete删除,是否可以重新定义属性等。默认值是true。
2、[[Eumerable]],设置属性是否可以通过for/in枚举,默认值是true。
3、[[Get]],读取属性时调用的函数。默认值为undefined。
4、[[Set],设置属性时调用的函数。默认值为undefined。
访问器属性不能直接定义,必须用object.defineProptype()方法。
object.defineProptype(book,'year',{
get :function(){
return this._year;}
},
set:function(newYear){
this._year=newYear;
});