本章节介绍一下关于对象直接量拷贝相关的一些问题。

可能很多朋友认为这个操作实在是太简单了,看如下代码实例:
   [ bootstrap ] 运行代码    下载代码
<script>
var obj={
  webName:"51前端",
  innerObj:{
    url:"51qianduan.com"
  }
}
var newObj=new Object();
for(var prop in obj){
  newObj[prop]=obj[prop];
}
console.log(newObj.webName);
</script>
上面的代码貌似很完美的实现拷贝复制效果,其实并非如此,看如下代码:
   [ bootstrap ] 运行代码    下载代码
<script>
var obj={
  webName:"51前端",
  innerObj:{
    url:"softwhy.com"
  }
}
var newObj=new Object();
for(var prop in obj){
  newObj[prop]=obj[prop];
}
obj.innerObj.url="51前端网址";
console.log(newObj.innerObj.url);
</script>
从上面的代码可以看出并没有实现真正的拷贝效果,通过obj对象修改属性的相关值,在所谓的拷贝对象中也会被修改。

这是因为在上面的对象拷贝中,如果属性值是一个引用类型的,那么新拷贝中的相关属性的赋值只是那个引用类型数据的地址,所以这并不是真正的拷贝。下面来看一下如何实现真正的拷贝,代码如下:
   [ bootstrap ] 运行代码    下载代码
<script>
var obj={
  webName:"51前端",
  innerObj:{
    url:"softwhy.com"
  }
}
function cloneObj(oldObj){
  if (typeof(oldObj) != 'object') return oldObj;
  if (oldObj == null) return oldObj;
  var newObj = new Object();
  for (var prop in oldObj){    
    newObj[prop] = cloneObj(oldObj[prop]);
  }
  return newObj;
};
var newObj=cloneObj(obj);
obj.innerObj.url="51前端网址";
console.log(newObj.innerObj.url);
</script>

代码描述:js对象 直接量拷贝。js对象直接量拷贝源码实例



271 362



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到