Реализация javascript Object.defineProperties - PullRequest
1 голос
/ 20 февраля 2012

Здравствуйте. Я обнаружил некоторые трудности при реализации 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 Ответ

1 голос
/ 20 февраля 2012

Вы должны указать writable: true как дескриптор свойства из _year.По умолчанию он недоступен для записи, и присвоение значения не доступному для записи свойству не оказывает никакого влияния.

Я настоятельно рекомендую активировать строгий режим, поскольку при назначении значения вы получите сообщение об ошибке.сбой значения свойства только для чтения.

"use strict"; // <---
Object.defineProperties(book1, {
    _year: {
        value: 2004
        writable: true  /* <-- writable set to true*/
    },
    edition: {
        value: 1,
        writable: true
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...