Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 剔除:将可观察对象克隆到另一个变量中,并将其转换为不可观察_Javascript_Html_Knockout.js - Fatal编程技术网

Javascript 剔除:将可观察对象克隆到另一个变量中,并将其转换为不可观察

Javascript 剔除:将可观察对象克隆到另一个变量中,并将其转换为不可观察,javascript,html,knockout.js,Javascript,Html,Knockout.js,我找不到这个问题的答案。假设我有一个可观察的对象,我想把它克隆成另一个完全独立的变量,使这个变量不可观察。有人能帮我找到这个问题的答案吗 我尝试了如下解决方案: var notObservableVar = observableVar(); 但新变量似乎不是独立的,因为我的后续代码似乎与ObservalEvar一起工作,而不是新的独立变量。Update: 谢天谢地,@Brother Woodrow在评论中指出,Knockout为作业提供了一个API方法.toJS: var notObserva

我找不到这个问题的答案。假设我有一个可观察的对象,我想把它克隆成另一个完全独立的变量,使这个变量不可观察。有人能帮我找到这个问题的答案吗

我尝试了如下解决方案:

var notObservableVar = observableVar();
但新变量似乎不是独立的,因为我的后续代码似乎与ObservalEvar一起工作,而不是新的独立变量。

Update: 谢天谢地,@Brother Woodrow在评论中指出,Knockout为作业提供了一个API方法.toJS:

var notObservable = ko.toJS(observableVar)
旧答案如果你的可观察对象有子可观察对象,不要使用此选项: 要创建对象的浅层副本,可以使用object.prototype.assign:

另一个选项是使用对象分解:

var notObservableVar = {...observableVar()};
请注意,这两种方法都需要ES6支持——要么在buildstack Babel中,要么在浏览器中运行。还要注意的是,要使对象分解与Babel 6协同工作,您需要一个插件,因为当Babel 6是当前版本时,对象分解仍然是一个建议

如果ES6不适用于您,您可以使用串接然后解析对象的旧方法:

var notObservableVar = JSON.parse(JSON.stringify(observableVar()));
更新: 谢天谢地,@Brother Woodrow在评论中指出,Knockout为作业提供了一个API方法.toJS:

var notObservable = ko.toJS(observableVar)
旧答案如果你的可观察对象有子可观察对象,不要使用此选项: 要创建对象的浅层副本,可以使用object.prototype.assign:

另一个选项是使用对象分解:

var notObservableVar = {...observableVar()};
请注意,这两种方法都需要ES6支持——要么在buildstack Babel中,要么在浏览器中运行。还要注意的是,要使对象分解与Babel 6协同工作,您需要一个插件,因为当Babel 6是当前版本时,对象分解仍然是一个建议

如果ES6不适用于您,您可以使用串接然后解析对象的旧方法:

var notObservableVar = JSON.parse(JSON.stringify(observableVar()));

var notObservableVar=Object.assign{},observevar;非常感谢,这看起来确实有效。如果你愿意,为这个问题发布一个新的答案,我会接受正确的答案。请注意,这会创建一个浅显的副本。该对象的可观察属性仍将保留引用。var notObservableVar=object.assign{},observableVar;非常感谢,这看起来确实有效。如果你愿意,为这个问题发布一个新的答案,我会接受正确的答案。请注意,这会创建一个浅显的副本。该对象的可观察属性仍将保留引用。是否有可能创建变量的深层副本,以确保在使用这些变量时不会产生意外的影响?请注意,Knockout实际上有一个内置的方法toJS,该方法也执行相同的操作,但不依赖Object.assign:var notObservable=ko.tojsobservable@BrotherWoodrow这是否也会影响定义为可观察对象的可观察对象的属性?是的,这正是toJS方法所做的。是否有可能改为创建变量的深度副本,为了确保在使用这些变量时不会产生任何意外的影响,请注意,Knockout实际上有一个内置的方法toJS,它做同样的事情,但是不依赖Object.assign:var notObservable=ko.tojsobservable@BrotherWoodrow这是否也会影响可观察对象上定义为可观察对象的属性?是的,这正是toJS方法所做的。