我对这些对象的年龄属性犯了一个错误,当我稍后尝试重新分配不同的值时,它根本不会改变它。
我希望它与 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