在构造函数中,我做了类似这样的事情
let REPEATS = 1e7;
function play() {
let start = undefined;
let count = undefined;
let elapsedWhile = undefined;
let elapsedDo = undefined;
let x = undefined;
start = Date.now();
count = REPEATS;
while(count >0) {
x = Math.sqrt(Math.random());
count -= 1;
}
elapsedWhile = Date.now() - start;
start = Date.now();
count = REPEATS;
do {
x = Math.sqrt(Math.random());
count -= 1;
}while(count >0);
elapsedDo = Date.now() - start;
console.log(elapsedWhile, elapsedDo);
}
function init() {
xreport ('OK');
var formx = document.getElementById("f1");;
formx.X.addEventListener('click', play);
}
在另一个按下按钮时调用的函数中,我执行以下操作:
selectedDate: Object;
// construtor
this.selectedDate = {};
this.selectedDate['date'] = new Date();
this.selectedDate['pristine'] = new Date();
我收到以下错误:
TypeError:无法分配给只读属性' date'对象' [对象]'
答案 0 :(得分:6)
对Ryan Q的信任:
正如Ryan评论的那样,我在我的应用程序中使用了ngRx,而我确实通过一个动作将this.selectedDate对象传递到了商店,因此我无法修改存储在State中的对象。
解决此问题的一种方法是传递新的对象引用,这应解决问题:
this.store.dispatch(new settime.DateChangeAction(Object.assign({}, this.selectedDate)));
答案 1 :(得分:2)
@维卡斯'回答让我走上了解决类似问题的正确轨道。
我试图处理上传,我想在其中显示进度:
- 从UploadComponent
,我向父母发出一个事件
- 父母向商店发送行动
- 一个效果捕获操作,调用服务上传文件(返回一个包含两个observables的数组:progress$
和result$
)
- 效果调度包含可观察
HttpProgress
动作
此时我遇到了类似的问题。在深入了解商店冻结代码后,我和同事发现它也冻结了action.payload
。因此,将可观察的结果传递给错误,因为可观察状态在内部发生变异。
我不使用有效负载将其保存到商店中,这样我就可以在我的组件中注册操作$所以这里我不会感到无所谓可变对象进入有效载荷。为了避免这个错误,我只是将observable包装成函数,因为深度冻结不会冻结函数。