js深拷贝和浅拷贝的区别
1.浅拷贝:复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据。
2.深拷贝(复杂):复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制。
一、数组的深浅拷贝
在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。
var arr = ["One","Two","Three"]; var arrto = arr; arrto[1] = "test"; document.writeln("数组的原始值:" + arr + "
");//Export:数组的原始值:One,test,Three document.writeln("数组的新值:" + arrto + "
");//Export:数组的新值:One,test,Three
像上面的这种直接赋值的方式就是浅拷贝,很多时候,这样并不是我们想要得到的结果,其实我们想要的是arr的值不变,不是吗?
方法一:js的slice函数
var arr = ["One","Two","Three"]; var arrtoo = arr.slice(0); arrtoo[1] = "set Map"; document.writeln("数组的原始值:" + arr + "
");//Export:数组的原始值:One,Two,Three document.writeln("数组的新值:" + arrtoo + "
");//Export:数组的新值:One,set Map,Three
方法二:js的concat方法
var arr = ["One","Two","Three"]; var arrtooo = arr.concat(); arrtooo[1] = "set Map To"; document.writeln("数组的原始值:" + arr + "
");//Export:数组的原始值:One,Two,Three document.writeln("数组的新值:" + arrtooo + "
");//Export:数组的新值:One,set Map To,Three
二、对象的深浅拷贝
var a={name:'yy',age:26}; var b=new Object(); b.name=a.name; b.age=a.age; a.name='xx'; console.log(b);//Object { name="yy", age=26} console.log(a);//Object { name="xx", age=26}
就是把对象的属性遍历一遍,赋给一个新的对象。
var deepCopy= function(source) { var result={}; for (var key in source) { result[key] = typeof source[key]==='object'? deepCoyp(source[key]): source[key]; } return result; }
举一个jQuery中的例子:
jQuery.extend = jQuery.fn.extend = function() {//1.将extend方法扩展到JQ(函数)下边:扩展静态方法 //2. jQuery.fn.extend 把extend扩展到jq.fn下 且jQuery.fn = jQuery.prototype 扩展实例方法 // 1.2.功能相似 var options, name, src, copy, copyIsArray, clone, //定义一些变量 target = arguments[0] || {}, //目标元素是0第一个元素$.extend( a , { name : 'hello' } , { age : 30 } ); i = 1, //第一个元素的位置 length = arguments.length,//第一个个对象的元素 deep = false; //是否是深拷贝 默认 false不是 // Handle a deep copy situation 看是不是深拷贝情况 if ( typeof target === "boolean" ) { //是布尔值 deep = target; target = arguments[1] || {}; //目标元素是第二个$.extend( true , a , b ) // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) 看参数正确不 if ( typeof target !== "object" && !jQuery.isFunction(target) ) { // 当目标不是对象或者不是函数的时候 target = {}; //变成一个空的jason } // extend jQuery itself if only one argument is passed看是不是插件情况 if ( length === i ) { //只写了一个对象 要把这个对象扩展到jq源码上 静态方法 或者是实例方法 target = this; //this 是$ 或者 $(); --i; } // 可能有多个对象情况 for ( ; i
什么是克隆?
git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等。clone是本地没有repository时,将远程repository整个下载过来。pull是本地有repository时,将远程repository里新的commit数据(如有的话)下载过来,并且与本地代码merge。
git pull相当于git fetch和git merge。其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。pull是本地有repository时,将远程repository里新的commit数据(如有的话)下载过来,并且与本地代码merge。clone是本地没有repository时,将远程repository整个下载过来。
克隆可以理解为复制、拷贝,就是从原型中产生出同样的复制品,它的外表及遗传基因与原型完全相同。简单讲就是一种人工诱导的无性繁殖方式。但克隆又与无性繁殖有所区别。
无性繁殖是指不经过雌雄两性生殖细胞的结合、只由一个生物体产生后代的生殖方式,动物没有人工操作是不能进行无性繁殖的。科学家把人工遗传操作动物繁殖的过程叫克隆,这门生物技术叫克隆技术。
克隆的基本过程是先将含有遗传物质的供体细胞的核移植到去除了细胞核的卵细胞中,利用微电流刺激等使两者融合为一体,然后促使这一新细胞分裂繁殖发育成胚胎,当胚胎发育到一定程度后,再被植入动物子宫中使动物怀孕,便可产下与提供细胞者基因相同的动物。
扩展资料:
关于克隆技术的演变经过
一,公元前5000年-谷物选种
人类祖先发现,最茁壮的植株的种子培植出的谷物也更优良。这是人类开始按照人的意图控制生命的开端,这也是克隆技术最终目标的最初体现。
二,1952年-克隆蝌蚪
小小的蝌蚪改写了生物技术发展史,成为世界上第一种被克隆的动物。美国科学家罗伯特·布里格斯和托玛斯·金用一只蝌蚪的细胞创造了与原版完全一样的复制品。
三,1972年-基因复制
克隆技术精细到以单个基因复制为单位。科学家将某种特定基因单离出来,将它与某有机体(最初是一种酵母)结合,有机体将新基因融入自己的DNA结构后再繁殖,产生出理想基因的复制品。
四,1978年-第一例试管婴儿出生
整个世界吵嚷着想要目睹人类第一个体外受精婴儿路易斯的“庐山真面目”。英国医生用丈夫的精子在一个试管内使卵子受精,然后将胚胎植入健康母亲的子宫内。
五,1997年2月-多利
1996年,世界第一例从成年动物细胞克隆出的哺乳动物绵羊多利诞生。这个秘密直到1997年2月才向世人公布。?
六,1998年-克隆批量化
美国夏威夷大学的科学家用成年细胞克隆出50多只老鼠,并接着培育出3代遗传特征完全一致的实验鼠。与此同时,其它几个私立研究机构也用不同的方法成功克隆出小牛。?
七,2000年-人类近亲被克隆
美国俄勒冈的研究者用与克隆多利羊截然不同的方法克隆出猴子, 与多利不同的是,这只猴子既有母亲也有父亲,但它只是人工4胞胎中的一个。此外,帮助培育出多利羊的生物技术公司宣布克隆出5只小猪仔。该公司宣称,克隆猪终将成为人类移植器官的“加工厂”。
八,2001年-克隆人被提上日程
2001年,美、意科学家联手展开克隆人的工作。2001年11月美科学家宣布首次克隆成功了处于早期阶段的人类胚胎,称其目标是为病人“定制”出不会诱发排异反应的人体细胞用于移植。
九,2004年-“克隆人类胚胎”在英国合法化
2004年8月11日 英国颁发全球首张“克隆人类胚胎”执照,合法执照有效期为一年,胚胎十四天后必须毁坏,培育克隆婴儿仍属非法行为。其目的是:增加人类对自身胚胎发育的理解;增加人类对高危疾病的认识;推动人类对高危疾病的治疗方法。
人民网-“克隆人”
百度百科-克隆
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!