Skip to main content
 首页 » 编程设计

javascript之为什么我不能在 JavaScript 中更改对象属性

2024年12月31日10zhoujg

我对这些对象的年龄属性犯了一个错误,当我稍后尝试重新分配不同的值时,它根本不会改变它。

我希望它与 Object.create 一起使用方法。我应该怎么做才能解决这个问题?

var personProto = { 
  calculateAge: function() { 
    console.log(2019 - this.yearOfBirth) 
  }, 
  fullName: function() { 
    console.log(this.name + ' ' + this.lastName) 
  } 
} 
 
var sam = Object.create(personProto, { 
  name: { value: "samuel" }, 
  yearOfBirth: { value: 1092 }, 
  lastName: { value: "max" }, 
  job: { value: "developer" } 
}); 
 
sam.yearOfBirth = 1992; 
 
sam.calculateAge(); // 927

console.log(sam.calculateAge());假设yearsOfBirth仍然是1092,即使我将其更改为1992并且输出应该是27,给我927。

请您参考如下方法:

默认情况下,使用 Object.create 分配的属性不可写。尝试写入不可写属性是 JavaScript 中的静默错误 - 使用严格模式的众多原因之一。

这是您的代码,但在严格模式下:

'use strict'; 
 
var personProto = { 
 
        calculateAge:function(){ 
            console.log(2019 -this.yearOfBirth) 
        }, 
        fullName:function(){ 
            console.log(this.name + ' ' + this.lastName) 
        } 
    } 
 
    var sam = Object.create(personProto, { 
        name:{value:'samuel'},  
        yearOfBirth:{value:1092},  
        lastName:{value:'max'}, 
        job:{value:'developer'} 
    }); 
 
    sam.yearOfBirth = 1992; 
 
    console.log(sam.calculateAge()); 
    927


请注意,它现在会触发一个错误并告诉您究竟出了什么问题。

要解决此问题,只需使属性可写。

'use strict'; 
 
var personProto = { 
 
        calculateAge:function(){ 
            console.log(2019 -this.yearOfBirth) 
        }, 
        fullName:function(){ 
            console.log(this.name + ' ' + this.lastName) 
        } 
    } 
 
    var sam = Object.create(personProto, { 
        name:{value:'samuel',writable:true},  
        yearOfBirth:{value:1092,writable:true},  
        lastName:{value:'max',writable:true}, 
        job:{value:'developer',writable:true} 
    }); 
 
    sam.yearOfBirth = 1992; 
 
    console.log(sam.calculateAge()); 
    927