How to clone js object?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is the most efficient way to clone a JavaScript object?
如何使用如下的外部引用克隆JS对象:
1 2 3 4 | { ID: _docEl, Index: next, DocName: _el } |
有什么想法吗?
您必须对该对象进行迭代,并复制其所有属性。
然后,如果它的任何属性也是对象,假设您也要克隆这些属性,那么您必须递归到它们中。
这里有各种方法可以做到这一点:克隆javascript对象最有效的方法是什么?
根据托马斯鲁特的建议(未经测试的代码),我可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 | function cloneObj(obj) { var clone = {}; for (var i in obj) { if (obj[i] && typeof obj[i] == 'object') { clone[i] = cloneObj(obj[i]); } else { clone[i] = obj[i]; } } return clone; } |
您可以使用jquery.extend:
1 2 3 4 5 | // Shallow copy var newObject = jQuery.extend({}, oldObject); // Deep copy var newObject = jQuery.extend(true, {}, oldObject); |
以下文章非常有用:
在javascript中深度克隆对象最有效的方法是什么?
javascript JS对象克隆
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Object._clone = function(obj) { var clone, property, value; if (!obj || typeof obj !== 'object') { return obj; } clone = typeof obj.pop === 'function' ? [] : {}; clone.__proto__ = obj.__proto__; for (property in obj) { if (obj.hasOwnProperty(property)) { value = obj.property; if (value && typeof value === 'object') { clone[property] = Object._clone(value); } else { clone[property] = obj[property]; } } } return clone; }; |
CoffeeDescript JS对象克隆
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Object clone Object._clone = (obj) -> return obj if not obj or typeof(obj) isnt 'object' clone = if typeof(obj.pop) is 'function' then [] else {} # deprecated, but need for instanceof method clone.__proto__ = obj.__proto__ for property of obj if obj.hasOwnProperty property # clone properties value = obj.property if value and typeof(value) is 'object' clone[property] = Object._clone(value) else clone[property] = obj[property] clone |
现在你可以试着这么做了
1 2 3 | A = new TestKlass B = Object._clone(A) B instanceof TestKlass => true |
1 2 3 | function objToClone(obj){ return (new Function("return" + obj)) } |