javascript - 无法分配给对象 'name' 的只读属性 '[object Object]'

标签 javascript oop

以下代码只会为 name 属性抛出错误。 它可以通过在 Object.create 参数中将 name 属性指定为可写来修复,但是我试图理解为什么会这样(也许有一种更优雅的方法来修复它)。

var BaseClass = function (data) {
  Object.assign(this, data);
}

var ExtendedClass = function () {
  BaseClass.apply(this, arguments);
}

ExtendedClass.prototype = Object.create(BaseClass);

console.log(new ExtendedClass({ type: 'foo' }));
new ExtendedClass({ name: 'foo' });

最佳答案

如果您在 Angular+Typescript+NgRX 中遇到此错误:

您可以使用扩展运算符获取只读对象的浅拷贝以使其可读,但根据您的情况,您可能不希望这样做。

let x = [...y];

如果您使用的是 Redux/NgRX,您的选择器可能会返回一个带有对商店的引用的只读对象,这可能会在尝试通过模板绑定(bind)更改该对象属性时引发异常。根据您的情况,您可以进行深层复制以删除商店引用。

let x = JSON.parse(JSON.stringify(y));

关于javascript - 无法分配给对象 'name' 的只读属性 '[object Object]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288164/

相关文章:

javascript - 无法在带有 Nightwatch 的 Chai.js 中使用期望

javascript - iOS 5 Safari 中导航后退/卸载事件未触发时出现页面缓存问题

c# - 如何在 Postback 上获取我的隐藏字段值

c++ - 协调两个类的析构函数,其中一个类需要先清理

oop - 丰富的领域模型 - 状态保护与映射便利性

javascript - 如何更改下拉菜单的样式

javascript - 程序中的锁屏

PHP OOP 和 PDO

oop - 在函数内部创建对象是否可以

java - 如何纠正? -- "both define getObjectCopy(), but with unrelated return types"-- 但它是*一个*函数