首先要知道,一旦调用 Object.defineProperty() 方法时,对象的数据属性在不指定的情况下,configurable、enumerable 和
writable 特性的默认值都是false,因此如果要达到修改数据属性时务必要加上 writable=true 语句。
而针对多个属性时就要用到Object.defineProperties()
<script>
var book = {};
Object.defineProperties(book, {
_year: {
writable:true,
value: 2004
},
edition: {
writable:true,
value: 1
},
year: {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
book.year=2006;
alert(book.edition); //3
alert(book._year); //2006
</script>
上面代码里的_year 和 editon都加上了 writable=true ,如果不加,那么当调用 getter和 setter 时就不能实现改变对象属性值。
其次,访问器属性没有value值,但要调用setter时还需通过book.year传入数值,而此时并不存在 value就等于2006的说法。