我有这个代码段,但无法解释为什么在尝试为定义为可写的属性赋值时会抛出错误:
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??';
答案 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属性固定且不可变”