实现javascript Object.defineProperties

时间:2012-02-20 13:11:25

标签: javascript object properties

你好我在实现javascript Object.defineProperties时遇到了一些困难:

var book1 = {};
Object.defineProperties(book1, {
_year: {
    value: 2004
},
edition: {
    value: 1
},
year: {
    get : function() {
        return this._year;
    },
    set : function(newValue) {
        if ((newValue - this._year) > 0) {
            this.edition += 1;
        } else if ((newValue - this._year) < 0) {
            this.edition -= 1;
        }
        this._year = newValue;
    }
}
});
book1.year = 2005;
document.write(book1.edition);  //get 1, expect 2
document.write('<br/>');
book1.year = 2006;
document.write(book1.edition); //get 1, expect 3
document.write('<br/>');

浏览器:Chrome 17.0.963.56

欢迎任何回答。 谢谢。

1 个答案:

答案 0 :(得分:1)

您必须将writable: true指定为_year的{​​{3}}。默认情况下,它不可写,并且为不可写属性赋值不会产生任何影响。

我强烈建议您激活严格模式,因为在为只读属性赋值时失败会收到错误消息。

"use strict"; // <---
Object.defineProperties(book1, {
    _year: {
        value: 2004
        writable: true  /* <-- writable set to true*/
    },
    edition: {
        value: 1,
        writable: true
    },