JavaScript对象复制、扩展(改变原对象的引用,避免原对象被动态的改变值);
2016-06-29 17:46
549 查看
javaScript对象在赋值时,常常直接使用”=”,觉得可以直接把一个一个对象赋值给另一个对象;
javaScript中的数据类型分为两类,原始类型和对象类型;
1.原始类型:包括数值,字符串、布尔值、null、undefined;
2.对象类型:对象即属性的集合(function、Array);
先了解数据类型在计算机中的存储;
1.原始类型:存储的是对象的原始数据;
2.对象类型:对象的原型也是引用类型,对象类型的值单独存放。对象原型的方法和属性放在内存中,通过原型链的方式来指向这个地址;所以对象类型存储的是对象的引用地址;
一、原始类型:
字符串:
布尔类型
数值
重以上的离职可以看出,原始对象的复制,通过”=”的方式仍然能够获得正确的值;
二、对象类型
看代码:
对象类型在复制的时候,只是将对象的引用复制了,将person对象的引用地址值赋值给了person_o
所以在perison_o改变对象属性值的时候,person的引用也发生了改变,它们在内存中获取的都是同
一个对象;
解决方案;
JQuery中有extend()方法合并多个对象;
使用:var newSrc=$.extend({},src1,src2,src3…);很轻松的搞定;
javaScript中没有明确类的概念,我们要针对每个对象类型,写个方法,复制对象中的每个属性及方法;
javaScript中的数据类型分为两类,原始类型和对象类型;
1.原始类型:包括数值,字符串、布尔值、null、undefined;
2.对象类型:对象即属性的集合(function、Array);
先了解数据类型在计算机中的存储;
1.原始类型:存储的是对象的原始数据;
2.对象类型:对象的原型也是引用类型,对象类型的值单独存放。对象原型的方法和属性放在内存中,通过原型链的方式来指向这个地址;所以对象类型存储的是对象的引用地址;
一、原始类型:
字符串:
var a = "a"; var b = a; b = "b"; console.log("a:"+a);// "a" console.log("b:"+b);// "b"
布尔类型
var a = true; var b = a; b = false; console.log("a:"+a);// true console.log("b:"+b);// false
数值
var a = 1; var b = a; b = 2; console.log("a:"+a);// 1 console.log("b:"+b);// 2
重以上的离职可以看出,原始对象的复制,通过”=”的方式仍然能够获得正确的值;
二、对象类型
看代码:
var person = { name:"z", age:24, child:{ name:"z-1", age:2 } } var person_o = person; person_o.child.age = 200; console.log("person:"+person.child.age);// 200 console.log("person_o:"+person_o.child.age);// 200
对象类型在复制的时候,只是将对象的引用复制了,将person对象的引用地址值赋值给了person_o
所以在perison_o改变对象属性值的时候,person的引用也发生了改变,它们在内存中获取的都是同
一个对象;
解决方案;
JQuery中有extend()方法合并多个对象;
使用:var newSrc=$.extend({},src1,src2,src3…);很轻松的搞定;
javaScript中没有明确类的概念,我们要针对每个对象类型,写个方法,复制对象中的每个属性及方法;
/** * 对象复制(克隆)方法,改变对原对象的引用,生成新对象 * 复制时包括对象中的属性,方法; * 其中dataType()方法请参照方法库:[javascript常用方法整理;(不断更新)](http://blog.csdn.net/j_y_x_8/article/details/52045716) * * @obj:数据 **/ function clone(obj){ var result = {},objClass=dataType(obj); if (objClass==="Object") { result = {}; }else if (objClass==="Array"){ result = []; }else{ return obj; } // 遍历obj对象的每一个属性 for ( var key in obj ){ var = obj[key]; if (dataType(val)==="Object"){ result[key] = arguments.callee(val); }else if(dataType(val)==="Array"){ result[key] = arguments.callee(val); }else{ result[key] = obj[key]; } } return result; };
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解