关于JS中对象的属性特性问题

这里有一段示例代码

 var book = {};
Object.defineProperties(book, {
    _year: {
        value: 2004
    },
    edition: {
        value: 1
    },
    year: {
        get: function(){
            console.log('Getting year');
            return this._year;
        },
        set: function(newValue){
            console.log('Setting year');
            console.log('this:',this);
            if (newValue > 2004) {
                this._year = newValue;
                this.edition ++;
            }
        }
    }
});
console.info(book);
console.log('year:'+ book.year);
book.year = 2008;
console.log('edition:'+ book.edition);

但是在执行book.year赋值调用到setter方法中时,this.edition ++虽然执行了但是没有生效:
图片说明
book.edition值比并没有被改变,也查看了this的引用也没问题。这是为什么?

我明白了....
在使用Object.defineProperties()方法定义**数据属性**时候,writable特性默认为false,而使用book.edition = 2003 这样定义**数据属性**的时候writabletrue
在普通模式下执行不会报错,但是使用"use strict";进入严格模式下就会报错