Object.defineProperties()与多个属性

首先要知道,一旦调用 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的说法。

猜你喜欢

转载自blog.csdn.net/u011633428/article/details/83271380
今日推荐