Object.defineProperty()何时抛出错误?

时间:2017-09-24 16:36:05

标签: javascript

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之后,第一个没有,但另一个没有。这里有什么规则?

1 个答案:

答案 0 :(得分:0)

来自MDN的Object.defineProperty docs

  

可配置属性同时控制是否可以从对象中删除属性,以及是否可以更改其属性(可写为false除外)。

因此,任何无法配置的对象的无效配置都会抛出。但是将其更改为writable: false并非无效,即使是不可配置的。