面向对象(八)继承___ 01 拷贝属性(浅拷贝)
2017-02-25 本文已影响12人
凸小布
拷贝属性(浅拷贝)
存在问题:如果属性的值是引用类型的,那么子对象和父对象共享一块儿数据,修改了某一个对象,对另外一个对象有影响
拷贝属性(浅拷贝) 之 方式一for循环拷贝属性
<script>
/*
01for循环拷贝属性
001提供两个对象
002for循环拷贝属性
003修改某一个对象
004打印验证
*/
var obj1 = {
name:"hello",
des:"des",
friends:["哈哈", "呵呵", "哗啦"]
};
var obj2 = {};
//for循环拷贝属性
//赋值操作内部细节:是把右边变量(空间中)存储的值复制一份放在左边变量(空间中)
for(var k in obj1){
obj2[k] = obj1[k];
}
// 修改了某一个对象,对另外一个对象有影响???
obj2.name = "你好啊";
obj2.friends.push("共享了");
console.log(obj1.friends);
console.log(obj2.friends);
</script>
拷贝属性(浅拷贝) 之 方式二函数Object.assign()来实现 ES6之后才推出
<script>
/*
02函数来实现拷贝
001提供两个或两个以上的对象
002通过Object.assign(o, obj3);实现属性拷贝
003修改某一个对象
004打印验证
参数:
第一个参数是目标对象
第二个,第三个参数是要拷贝属性的对象
*/
var o = {};
var obj1 = {name:"name"};
var obj2 = {age:20};
var obj3 = {car:{type:"飞船"}};
Object.assign(o,obj2,obj1,obj3);
console.log(o);
obj3.car.type = '汽车';
console.log(o);
</script>
存在问题:如果属性的值是引用类型的,那么子对象和父对象共享一块儿数据,修改了某一个对象,对另外一个对象有影响