在node.js中克隆对象的最佳方法是什么

例:我想避免以下情况:

var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6

对象很可能包含复杂类型作为属性,所以简单的for(var x in obj1)解决不了问题。我需要自己写一个递归克隆吗?还是有一些我没有看到的内置的东西?


当前回答

查看underscore.js。它具有克隆和扩展以及许多其他非常有用的功能。

这可能很有用:在Node.js中使用下划线模块

其他回答

如果你正在使用coffee-script,它就像:

newObject = {}
newObject[key] = value  for own key,value of oldObject

虽然这不是一个深度克隆。

另一个解决方案是直接封装在新变量中使用: 其中obj1 ={…methoda}

你可以使用JQuery的extend函数:

var newClone= jQuery.extend({}, oldObject);  
var deepClone = jQuery.extend(true, {}, oldObject); 

还有一个Node.js插件:

https://github.com/shimondoodkin/nodejs-clone-extend

要做到没有JQuery或插件阅读这里:

http://my.opera.com/GreyWyvern/blog/show.dml/1725165

还有另一个库lodash,它有clone和cloneDeep。

Clone将克隆您的对象,但不会为非原语值创建一个新实例,而是使用对原始对象的引用

cloneDeep将在不引用原始对象的情况下创建新的对象,因此当您随后必须更改对象时更安全。

Object.defineProperty(Object.prototype, "extend", {
    enumerable: false,
    value: function(from) {
        var props = Object.getOwnPropertyNames(from);
        var dest = this;
        props.forEach(function(name) {
            if (name in dest) {
                var destination = Object.getOwnPropertyDescriptor(from, name);
                Object.defineProperty(dest, name, destination);
            }
        });
        return this;
    }
});

这将定义一个您可以使用的扩展方法。代码来自本文。