JavaScript对象定义属性不起作用

JavaScript对象定义属性不起作用,javascript,javascript-objects,Javascript,Javascript Objects,所以我了解到,在Javascript中,我们可以使用defineProperties来定义对象的多个属性。因此,我在下面的一个简单代码中尝试了它,但我并没有安静地得到我想要的结果。似乎访问器不工作,我不知道为什么 var book = {}; Object.defineProperties(book,{ _year: { value: 2004 }, edition: { value: 1}, year: { get: function(){ this._y

所以我了解到,在Javascript中,我们可以使用defineProperties来定义对象的多个属性。因此,我在下面的一个简单代码中尝试了它,但我并没有安静地得到我想要的结果。似乎访问器不工作,我不知道为什么

var book = {};
Object.defineProperties(book,{
 _year: {
    value: 2004 },
 edition: {
    value: 1},
 year: {
    get: function(){
    this._year;},
    set: function(value){
    if(value>2004){
     this._year = value;
     this.edition = this.edition + value - 2004;
 });
 this.year = 2016;
 alert(book.edition); //1 why??

代码中存在多个错误,但主要问题是,如果使用
值定义属性,则默认情况下该属性为只读:

可写的
true当且仅当与属性关联的值可以通过赋值运算符更改时。
默认值为false

您需要添加
writable:true
以使这些属性可写

因此,您的代码必须如下所示(包括对所有其他错误的更正):

var-book={};
对象。定义属性(书籍{
_年份:{
价值:2004年,

writable:true/代码中存在多个错误,但主要问题是,如果使用
值定义属性,则默认情况下该属性为只读:

可写的
true当且仅当与属性关联的值可以通过赋值运算符更改时。
默认值为false

您需要添加
writable:true
以使这些属性可写

因此,您的代码必须如下所示(包括对所有其他错误的更正):

var-book={};
对象。定义属性(书籍{
_年份:{
价值:2004年,

可写:是的//您似乎缺少了几个
}
是的,我刚刚意识到我缺少了那些右括号,格式样式没有明确说明。谢谢您似乎缺少了几个
}
是的,我刚刚意识到我遗漏了那些右括号,格式样式没有明确说明。非常感谢,事实上,我在使用defineProperties时才了解到这一点。默认情况下,可枚举、可配置和可写为false。getter中的
返回值似乎不正确required@j08691确实不是与给定代码无关,但如果OP尝试在代码中的另一个位置读取属性
year
,它将返回
undefined
,因此我将此更正添加为额外信息。因为否则此getter将没有多大意义。非常感谢,事实上,我只是在使用defineProperties.Enumerable时了解了这一事实默认情况下,可配置和可写为false。getter中的
返回值似乎不正确required@j08691它确实与给定代码无关,但如果OP尝试在代码中的另一个位置读取属性
year
,它将返回
undefined
,因此我将此更正添加为额外信息。因为其他明智的是,这个能手没有多大意义。