无法分配定义为可写的属性

时间:2015-01-06 21:36:24

标签: javascript ecmascript-5

我有这个代码段,但无法解释为什么在尝试为定义为可写的属性赋值时会抛出错误:

function Constructor()
{
    Object.seal(this);
}

Object.defineProperties(Constructor.prototype,
{
  field: {value: null, writable: true}
});


var instance = new Constructor();

instance.field = 'why this doesn\'t work??';

2 个答案:

答案 0 :(得分:0)

对象属性的分配始终分配对象本身的本地“自己”属性。原型上有一个类似命名的属性并不重要。您的实例是一个密封的对象,因此您无法写入它。

如果你打电话

Object.getPrototypeOf(instance).field = "this works";

你没事。

答案 1 :(得分:0)

这似乎是确切的预期行为。在此处查看文档:{​​{3}}

Sealing an object prevents new properties from being added and marks all existing properties as non-configurable. This has the effect of making the set of properties on the object fixed and immutable

重要的一点是“使对象上的set属性固定且不可变”