浅拷贝的三种实现方式
浅拷贝的三种实现方式:1、ES6的方法;2、使用 for in 循环;3、$.extend()。当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变。因为浅拷贝拷贝的是引用的地址,(所以必须在对象是多层才能拷贝,单层拷贝的是数值,多层说明里面套着对象,所以拷贝的是地址。)
1、ES6的方法
Object.assign() 作用:将第二个参数及以后的参数合并到第一个对象里。
参数1:target
参数2:对象……
参数3:对象….
例:
var obj = {a:{name:”kaiqin”,age:19}};
var obj1 = Object.assign({},obj);
obj1.a.name=”wang”
console.log(obj1)
console.log(obj)
2、使用 for in 循环
遍历每一个属性,将他们赋值给新的对象。 要求对象必须是多层的状态下才能实现浅拷贝
var obj = { a: {name:”kaiqin”,age:19 } } ;
var obj2 = {a:1,b:2,c:3};
//多层
function copy(obj){
var newObj = {};
for(var key in obj){
newObj[key] = obj[key];
}
return newObj;
}
//单层
var obj1 = copy(obj);
obj1.a.name=”wang”
console.log(obj1)
console.log(obj)
3、$.extend()
除了可以给jquery对象扩展方法外还可以实现深浅拷贝
1、布尔值 如果填true的情况下是深考贝 什么也不写就是浅拷贝
2、目标对象
3……后面所有的对象 都是需要合并的对象
var obj = {a:{name:”kaiqin”,age:19}};
var obj1 = {b:{name:”wang”,age:19}};
var obj2 = $.extend({},obj,obj1)
obj2.a.name=”zhang”;
console.log(obj2)
console.log(obj)
3、$.extend()
除了可以给jquery对象扩展方法外还可以实现深浅拷贝