淘汰赛:将可观察对象克隆到另一个变量中并将其变为不可观察对象

Knockout: Clone observable object into another variable and turn it not observable

我找不到这个特定问题的任何答案。假设我有一个可观察对象,我想将它克隆到另一个完全独立的变量中,并使该变量不可观察。有人可以帮我找到这个问题的解决方案吗?

我试过这样的解决方案:

var notObservableVar = observableVar();

但是新变量似乎不是独立的,因为我的后续代码似乎使用 observableVar 而不是新的独立变量。

更新:

正如@Brother Woodrow 在评论中所说的那样,Knockout 提供了一个 API 方法 .toJS() 来完成这项工作:

var notObservable = ko.toJS(observableVar)

https://knockoutjs.com/documentation/json-data.html

旧答案(如果你的可观察对象有子可观察对象,不要使用这个):

要创建一个对象的浅拷贝,你可以使用Object.prototype.assign():

var notObservableVar = Object.assign({}, observableVar());

另一种选择是使用对象解构:

var notObservableVar = {...observableVar()};

请注意,这两种方法都需要 ES6 支持——无论是在您的构建堆栈 (Babel) 中,还是在浏览器中,这应该是 运行。另请注意,要使对象解构与 Babel 6 一起使用,你需要一个插件(因为当 Babel 6 是当前版本时,对象解构仍然是一个提案)。

如果 ES6 不适合你,你可以使用字符串化然后解析对象的旧方法:

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