关于访问器属性

 

要修改属性默认的特性,必须使用ECAMScript 5的 Object.defineProperty() 方法。
例如:函数

var person = {};
Object.defineProperty(
person,'name',{
writable:false,
value:'tom'
}
);
console.log(person.name);//tom
person.name = 'join';
console.log(person.name);//tom

 

这个例子建立了一个名为name的属性,他的值为tom是只读的。这个属性的值是不能够修改的,若是尝试为他指定新值,在非严格模式下,赋值操做将被忽略,在严格模式下,赋值操做将会致使抛出错误。
相似的规则也适用于不可配置的属性。例如:this

var person = {};
Object.defineRroperty(person,'name',{
configurable:false,
value:'tom'
});
console.log(perso.name);//tom
delete person.name;//false
console.log(person.name);//tom

 

能够屡次调用Object.defineProperty()方法修改同一个属性,可是把configurable特性设置为false以后就会有限制spa

调用这个方法的时候,若是不指定,configurable、enumerable 和writable特性的默认值都是falsecode

访问器属性
访问器属性不包含数据值
他们包含一对getter和setter函数(不过,这两个函数都不是必须的)
在读取访问器属性的时候,会调用getter函数,这个函数复制返回有效的值。
在写入访问器属性的时候,会调用setter函数,并传入新值,这个函数负责决定如何处理数据。
访问器属性有以下四个特性
configurable
表示可否经过delete删除属性从而从新定义属性,可否修改属性的特性,或者可否把属性修改成数据属性。
直接在对象时定义的属性,这个特性的默认值为true
enumerable
保湿可否经过for-in循环返回属性。
直接在对象上定义的属性,这个特性的默认值为true
get
在读取属性时调用的函数
默认值为undefined
set
在写入属性时调用的函数
默认值为undefined
访问器属性不能直接定义。必须使用 Object.defineProperty()来定义。
例子:对象

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;
console.log(book.edition);// 2
相关文章
相关标签/搜索