基础语法
$.extend([deep],target,object1,[objectN]); //1. deep:true是深拷贝 默认false 浅拷贝 //2. target 要拷贝的目标对象 //3. object1 待拷贝的 第一个对象 //4. objectN 待拷贝的 第N个对象
一 深拷贝
//深度拷贝:完全克隆 是两个不同的对象 彼此修改不会影响 <script> var targetObj = {}; var obj = { id:1, msg: { success:1, error: 0 } }; $.extend(true,targetObj,obj); targetObj.msg.success = 2;//修改目标对象的success属性值 console.log(obj);//被拷贝对象的success值没有被修改 [ 因为他们是两个不同的对象 ] </script>
二 浅拷贝
<script> var targetObj = {}; var obj = { id:1, msg: { success:1, error: 0 } }; $.extend(targetObj,obj); targetObj.msg.success = 2;//修改目标元素的 success 属性值 console.log(obj);//影响到了被拷贝对象的 success 属性的值 </script>
//1 浅拷贝:被拷贝对象如果包含复杂数据类型 它是把 复杂数据类型的内存地址 拷贝给了目标对象 目标对象修改复杂数据类型的值 会影响到 被拷贝对象
浅拷贝场景1)拷贝对象和目标对象有相同的属性
var targetObj = { id:1, name:'李白' }; var obj = { id:2, name:'杜甫' }; $.extend(targetObj,obj); console.log(targetObj);// {id: 2, name: "杜甫"}
// 如果有相同的属性 被拷贝对象的属性值 会 覆盖 目标对象的属性值
浅拷贝场景2)被拷贝的对象包含复杂数据类型
<script> var targetObj = {}; var obj = { id:1, name:'李白', meg: { error: 0 } }; $.extend(targetObj,obj); console.log(targetObj); </script>
//是把 被拷贝对象 复杂数据类型 的内存地址 给了目标对象
//他们任何一个修改的都是一个对象
代码范例
<script> var targetObj = {}; var obj = { id:1, name:'李白', msg: { error: 0 } }; $.extend(targetObj,obj); targetObj.msg.error = 1;//修改目标元素的error属性值 console.log(obj);//影响到了obj对象的error属性值 </script>打印obj对象