【发布时间】:2012-12-12 21:05:31
【问题描述】:
我有一个混合了 KnockoutJS 可观察对象和标准属性的对象:
var original = {
a: ko.observable("a"),
b: "b"
};
我想创建一个original 对象的克隆而不对其进行任何引用,这样我就可以这样做:
var cloned = clone(original);
cloned.a("a cloned");
original.a(); //-> "a" ERROR HERE
original.a("a original");
cloned.a(); //-> "a cloned" ERROR HERE
和
cloned.b = "b cloned";
original.b //-> "b" OK
original.b = "b original";
cloned.b //-> "b cloned" OK
我已尝试使用该功能,但它导致 KnockoutJS 可观察属性被复制,而不是克隆:
cloneObj = function(obj){
if(obj === null || typeof obj !== 'object')
return obj;
var temp = obj.constructor(); // Give temp the original obj's constructor
for (var key in obj) {
temp[key] = cloneObj(obj[key]);
}
return temp;
};
正如你在这个小提琴http://jsfiddle.net/Ep3jY/ 中看到的,这个问题只发生在 KnockoutJS Observable 属性上,而正常的 JavaScript 属性被正确克隆。
现在我使用一种变通方法返回带有函数的对象,但这很烦人:
function(){
return {
a: ko.observable("a");
};
}
【问题讨论】:
-
对不起,问题更新了:问题在于敲除 observable 属性,而正常的 js 属性被正确克隆
标签: javascript object knockout.js clone cloning