美文网首页
js中深拷贝和浅拷贝

js中深拷贝和浅拷贝

作者: 蓝摇扼剑 | 来源:发表于2017-08-03 11:48 被阅读33次

对于问题:

var obj1 = {name:'小明'};

var obj2 = obj1;

obj2.name = "小红";

// obj1.name = ?? 

console.log(obj1.name);// 小红

想让obj1的名字不改变的方法。

1.实现方法最简单的方法

var obj1 = {name:'小明'}

var obj2 = JSON.parse(JSON.stringfy(obj1));

优点:简单方便快捷

缺点:会导致obj1里面的function消失。

2.使用递归的方法遍历属性,重新赋值

var cloneObj = function(obj){

var str, newobj = obj.constructor === Array ? [] : {};

if(typeof obj !== 'object'){

return;

} else if(window.JSON){

str = JSON.stringify(obj), //系列化对象

newobj = JSON.parse(str); //还原

} else {

for(var i in obj){

newobj[i] = typeof obj[i] === 'object' ?

cloneObj(obj[i]) : obj[i];

}

}

return newobj;

};

3.使用jquery的$.extend()

jQuery.extend(true,{a:{a:"a"}},{a:{b:"b"}}); // 深拷贝true

相关文章

网友评论

      本文标题:js中深拷贝和浅拷贝

      本文链接:https://www.haomeiwen.com/subject/djtplxtx.html