-1
我有混合KnockoutJS觀測和標準屬性的對象:與KnockoutJS觀察的性質JavaScript的克隆對象
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/而正常的JavaScript性能得到正確克隆的問題只能用KnockoutJS可觀測性情況看。
現在我用一種變通方法返回一個函數的對象,但是這是很煩人的:
function(){
return {
a: ko.observable("a");
};
}
http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-clone-a-javascript-object – HMarioD
對不起,問題是更新:問題是與基因敲除可觀察到的屬性,而正常的js屬性克隆正確 –