多个对象属性JavaScript

时间:2014-06-01 03:42:07

标签: javascript

在JavaScript中获得了这个代码片段,它将多个属性定义为对象。

var book = {};

Object.defineProperties(book , {
    _year: {
        value: 2004
    },

    edition: {
        value: 1
    },

    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);

因此,拥有该代码的图书声称alert(book.edition);会显示2。而是显示1。好像它永远不会执行访问者属性代码(year: get: set:)的一部分。谁知道为什么会这样?

1 个答案:

答案 0 :(得分:6)

edition已被定义为不可写属性 - 尚未指定writable描述符属性,默认情况下为false。因此this.edition += ...无声地失败。这同样适用于_year属性。

_year: {
    writable: true,
    value: 2004
},
edition: {
    writable: true,
    value: 1
},

Fiddle

注意:分配给不可写的属性会在strict mode中引发错误,因此您可以添加'use strict'; pragma以更轻松地发现这些错误。

参考: