var person = {};
Object.defineProperty(person,"name",{
writable: true,
configurable: false,
value: "Sahand"
});
alert(person.name); // "Sahand"
person.name = "Mahmoud";
alert(person.name); // "Mahmoud"
Object.defineProperty(person, "name", {
writable: false
});
person.name = "Sandra"; // "Mahmoud"
alert(person.name);
Object.defineProperty(person, "name", { // Error
writable:true
});
person.name = "Sahand";
在此代码中,defineProperty()
在调用它的前两次正常工作,但第三次抛出错误。这让我感到困惑,因为我认为如果对象在第一个configurable:false
调用中有defineProperty()
,则任何连续的defineProperty()
调用都会引发错误。相反,在设置writable:false
之后,第一个没有,但另一个没有。这里有什么规则?
答案 0 :(得分:0)
来自MDN的Object.defineProperty
docs:
可配置属性同时控制是否可以从对象中删除属性,以及是否可以更改其属性(可写为false除外)。
因此,任何无法配置的对象的无效配置都会抛出。但是将其更改为writable: false
并非无效,即使是不可配置的。