Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中创建对象的克隆_Javascript - Fatal编程技术网

在JavaScript中创建对象的克隆

在JavaScript中创建对象的克隆,javascript,Javascript,在JavaScript中 var arr = [1, 2, 3, 4, 5]; var arr2 = arr.slice(); 如果arr值更改,则arr2不会更改。即,arr[0]=0;,仍然arr2[0]==1;//对 考虑这一点: var obj = {name: 'John', company: 'XYZ'}; var obj2 = obj; // Creates a duplicate of obj 但是obj.name='Dave',也会使obj2.name='Dave' 如何对

在JavaScript中

var arr = [1, 2, 3, 4, 5];
var arr2 = arr.slice();
如果arr值更改,则arr2不会更改。即,arr[0]=0;,仍然arr2[0]==1;//对

考虑这一点:

var obj = {name: 'John', company: 'XYZ'};
var obj2 = obj; // Creates a duplicate of obj
但是obj.name='Dave',也会使obj2.name='Dave'


如何对对象执行切片操作?

要克隆不包括函数和原型的对象,应使用结构化克隆

对于node.js,我已经找到了,但是我不能告诉您它是否好

对于浏览器,您可以使用此异步克隆功能,这取决于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);
}
结构化克隆支持:

原语 新字符串、新布尔值、新数字 新日期 新正则表达式 新斑点 新文件 新文件列表 新阵列缓冲器 打字机 图像数据 阵列 普通物体 地图 设置
这是许多问题的重复。答案取决于你想要的是深度的还是浅层的。使用网站搜索。