在JavaScript中创建对象的克隆

时间:2014-12-18 08:13:45

标签: javascript

在JavaScript中,

var arr = [1, 2, 3, 4, 5];
var arr2 = arr.slice();
如果arr2值发生更改,则

arr不会更改。也就是说,arr[0] = 0;,仍为arr2[0] == 1; // true

考虑一下:

var obj = {name: 'John', company: 'XYZ'};
var obj2 = obj; // Creates a duplicate of obj

但是obj.name = 'Dave',也会obj2.name = 'Dave'

我们如何对对象进行slice()操作?

1 个答案:

答案 0 :(得分:1)

要克隆对象(不包括函数和原型),您应该使用结构化克隆。

对于node.js我找到了this package,但我不能告诉你它是否合适。

对于浏览器,您可以使用此异步克隆功能(它取决于postMessage的正确实现):

function clone(obj, callback) {
    var from = window.location.origin;
    var wrapper = {'__clone__': true};
    wrapper.__data__ = obj;
    var listener = function(e) {
        if(e.origin === from && e.data.__clone__) {
            callback(e.data.__data__);
            window.removeEventListener('message', listener);
        }
    };
    window.addEventListener('message', listener);
    window.postMessage(wrapper, from);
}

结构化克隆支持:

  • 基元
  • new String,new Boolean,new Number
  • 新日期
  • 新的RegExp
  • new Blob
  • 新文件
  • new FileList
  • new ArrayBuffer
  • TypedArrays
  • 的ImageData
  • 阵列
  • 普通对象
  • 地图