assign () 和 extend()

原创 Been101 随笔 js 144阅读 2018-01-07 16:49:59 举报

var obj1= {'a': 1};
var obj2= {'b': 1,'f':{g:2}};
var c = $.extend(obj1, obj2);
var d = $.extend({},obj1,obj2);

obj2.f.g = 3;

console.log(c.f.g); // 3 说明此时是 浅拷贝 ,只是拷贝的指引,所以c.f.g的值会受obj2的影响

console.log(obj1); // {a: 1, b: 1} obj1已被修改
console.log(d); // {'a':1,'b':1}
console.log(obj1); // {'a': 1};
console.log(obj2); // {'b': 1};

深拷贝
var obj1= {'a': 1};
var obj2= {'b': 1,'f':{g:2}};
var c = $.extend(true,obj1, obj2);
var d = $.extend(true,{},obj1,obj2);

obj2.f.g = 3;

console.log(c.f.g); // 2 说明此时是 深拷贝 ,拷贝了属性和值,所以c.f.g的值不会受obj2的影响

Object.assign({},obj1); // 只能浅拷贝

var obj1= {'a': 1};
var obj2= {'b': 1,'f':{g:2}};

var o = Object.assign({},obj1,obj2);
obj2.f.g = 3;

console.log(o.f.g); // 3 说明此时是 浅拷贝 ,只是拷贝的指引,所以c.f.g的值会受obj2的影响

深拷贝
var obj1 = { a: 0 , b: { c: 0}};
var obj3 = JSON.parse(JSON.stringify(obj1));
obj1.a = 4;
obj1.b.c = 4;
console.log(JSON.stringify(obj3));
console.log(obj3);

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复