[英]Uncaught TypeError: Cannot assign to read only property 'background' of object '#<Object>'
[英]Uncaught TypeError: Cannot assign to read only property
我正在尝试 Nicholas Zakas 所著的很棒的“Web 开发人员专业 JavaScript”一书中的这个非常简单的示例,但我无法弄清楚我在这里做错了什么。 一定是我错过的一些非常简单的事情,但我被卡住了。
这是代码:
'use strict';
var book = {};
Object.defineProperties(book, {
originYear: {
value: 2004,
writable: false
},
_year: {
value: 2004
},
edition: {
value: 1
},
year : {
get: function() {
return this._year;
},
set: function(newValue) {
if(newValue > this.originYear) {
this._year = newValue;
this.edition += newValue - this.originYear;
}
}
}
});
console.log(book.edition);
book.year = 2006;
console.log(book.edition);
我在 Chrome 控制台上遇到的错误是:
未捕获的类型错误:无法分配给 #main.js:31 Object.defineProperties.year.setmain.js:39(匿名函数)的只读属性“_year”
有人可以解释一下我哪里出错了吗?
这是小提琴
当您使用Object.defineProperties
,默认情况下writable
设置为false
,因此_year
和edition
实际上是只读属性。
将它们显式设置为writable: true
:
_year: {
value: 2004,
writable: true
},
edition: {
value: 1,
writable: true
},
请查看MDN 了解此方法。
writable
当且仅当可以使用赋值运算符更改与属性关联的值时,才为true
。
默认为false
。
我尝试将year
更改为不同的术语,并且奏效了。
public_methods : {
get: function() {
return this._year;
},
set: function(newValue) {
if(newValue > this.originYear) {
this._year = newValue;
this.edition += newValue - this.originYear;
}
}
}
如果有时一个链接! 不管用。 所以创建一个临时对象并从可写对象中获取所有值,然后更改值并将其分配给可写对象。 它应该完美。
var globalObject = {
name:"a",
age:20
}
function() {
let localObject = {
name:'a',
age:21
}
this.globalObject = localObject;
}
book.year.writable = true;
book.year = New Value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.