在Node.js中克隆对象

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

例如,我想避免以下情况:

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

该对象很可能包含复杂的类型作为属性,因此简单的for(var1 in obj1)无法解决。我需要自己编写一个递归克隆吗,还是内置了一些我看不到的东西?

梅伽罗2020/03/23 19:58:17
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;
    }
});

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

乐米亚2020/03/23 19:58:17

您可以从JQuery使用扩展功能:

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

猴子2020/03/23 19:58:17

我很惊讶Object.assign没有被提及。

let cloned = Object.assign({}, source);

如果可用(例如Babel),则可以使用对象传播运算符

let cloned = { ... source };