你好我在实现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
欢迎任何回答。 谢谢。
答案 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
},