无法分配给定义为可写的属性
Can't assign to property defined as writable
我有这个代码片段,但无法弄清楚为什么在尝试为定义为可写的属性分配值时它会抛出错误:
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??';
对对象属性的赋值始终是对对象本身的本地"自己的"属性的赋值。原型上有一个同名属性这一事实并不重要。您的实例是密封对象,因此您无法写入它。
如果你要打电话
Object.getPrototypeOf(instance).field = "this works";
你会没事的。
这似乎是确切的预期行为。 在此处查看文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
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
重要的一点是"使对象的集合属性固定且不可变"
相关文章:
- 使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
- Javascript - 使用数组属性定义对象
- ECMAScript 中的内部属性定义是为了什么
- 为什么不在对象外部使用属性定义语法是语法错误
- ES6 类属性定义
- 为javascript类的属性定义函数
- 属性定义是使用敲除时的方法定义
- 为AngularJS的子属性定义getter setter
- 如何给顶部属性定义在CSS chrome或firefox
- 如何通过两个属性定义元素
- 为什么函数属性定义在对象本身上(例如Function.name),而方法定义在Function.prototype上?
- Javascript原型属性定义为对象
- 停止传播在ASP.Net中使用属性定义的JavaScript事件
- 用不同的属性定义同一个Grunt Task两次
- AngularJS:在隔离范围内获取属性定义指令的值
- 需要另一个使用属性定义控制器的指令的角度指令
- 基于其他属性定义对象属性值
- 如何将属性定义为变量
- 奇怪的javascript属性定义使用聚合物
- fabric.js -如果属性定义在new fabric.Circle()括号之外,则Circle不起作用