在JavaScript中获得了这个代码片段,它将多个属性定义为对象。
var book = {};
Object.defineProperties(book , {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
book.year = 2005;
alert(book.edition);
因此,拥有该代码的图书声称alert(book.edition);
会显示2
。而是显示1
。好像它永远不会执行访问者属性代码(year: get: set:)
的一部分。谁知道为什么会这样?
答案 0 :(得分:6)
edition
已被定义为不可写属性 - 尚未指定writable
描述符属性,默认情况下为false
。因此this.edition += ...
无声地失败。这同样适用于_year
属性。
_year: {
writable: true,
value: 2004
},
edition: {
writable: true,
value: 1
},
注意:分配给不可写的属性会在strict mode中引发错误,因此您可以添加'use strict';
pragma以更轻松地发现这些错误。
参考: