如何在javascript中使用setter和getter,我遇到了一个错误

xin*_*a1i 7 javascript

我的英语不好,但我会尽力解释我的问题.说明:警报结果是1,我不是为什么,我认为这应该是2015年提醒.

    var book = {};
    Object.defineProperties(book, {
            _year: {
                value: 1
            },
            edition: {
                value: 23
            },
            year: {
                get: function () {
                    return this._year;
                },
                set: function (newValue) {
                    if (newValue > 2004)
                        this._year = newValue;
                }
            }
        }
    );
    book.year = 2015;
    alert(book.year);
Run Code Online (Sandbox Code Playgroud)

Roo*_*nen 10

你需要添加writable:true就像这样

_year: {
  value: 1,
  writable: true
},
Run Code Online (Sandbox Code Playgroud)

为__year_.

来自Mozilla开发者网络:

当且仅当可以使用赋值运算符更改与属性关联的值时,才返回true.默认为false.

  • 很好的抓住; 我想知道为什么我没有看到更经常使用的defineProperties().请注意,当您在现有对象属性上使用更常见的Object.defineProperty()时,该标志已经设置,因此您不需要显式提及可写. (2认同)
  • @dandavis:实际上,我已经在JavaScript上工作​​了很长一段时间,我从来没有听说过它.肯定会更多地研究它. (2认同)