在node.js中克隆对象的最佳方法是什么
例如,我想避免以下情况:
var obj1 = {x: 5, y:5}; var obj2 = obj1; obj2.x = 6; console.log(obj1.x); // logs 6
该对象很可能包含复杂的类型作为属性,因此简单的for(var1 in obj1)无法解决。我需要自己编写一个递归克隆吗,还是内置了一些我看不到的东西?
简洁的深层副本:
var obj2 = JSON.parse(JSON.stringify(obj1));
注意: 现在,Node.js文档中将该解决方案标记为不推荐使用:
从未打算在内部Node.js模块之外使用util._extend()方法。社区仍然找到并使用了它。 它已被弃用,不应在新代码中使用。JavaScript通过Object.assign()具有非常相似的内置功能。
从未打算在内部Node.js模块之外使用util._extend()方法。社区仍然找到并使用了它。
它已被弃用,不应在新代码中使用。JavaScript通过Object.assign()具有非常相似的内置功能。
原始答案 :
对于浅表副本,请使用Node的内置util._extend()功能。
util._extend()
var extend = require('util')._extend; var obj1 = {x: 5, y:5}; var obj2 = extend({}, obj1); obj2.x = 6; console.log(obj1.x); // still logs 5
Node _extend函数的源代码在这里:https : //github.com/joyent/node/blob/master/lib/util.js
_extend
exports._extend = function(origin, add) { // Don't do anything if add isn't an object if (!add || typeof add !== 'object') return origin; var keys = Object.keys(add); var i = keys.length; while (i--) { origin[keys[i]] = add[keys[i]]; } return origin; };