在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()
操作?
答案 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);
}
结构化克隆支持: