Javascript中对象的可复制特性
2012-01-07 10:28 AnyKoro 阅读(248) 评论(0) 编辑 收藏 举报在Javascript中,对象其实就是一个key-value的array。但是出于节约资源的目的,几乎所有的现代语言,在出现以下代码的场景时候,都会采用引用传递,而并不是复制。
objectB=objectA;
对于诸如想C#之类的语言,你需要依靠专门的函数去完成clone的功能。但是Javascript却可以更简便的实现,关键利用的就是其Key-Value的array的特性。
在JavaScript中,对于普通基本类型变量的复制,是采用值传递的,这个和其他很多语言的机制也是相同的。
例如,以下代码。
var a=3,b=2;
b=a;//b=3
b=4;//a=3
从上面代码,我们很明显可以看出是真正的复制。
因此,我们就很容易想到,既然JavaScript对象是key-value的array,那么如果我们把每个值取出来然后付给另一个对象是不是就ok了?
答案是肯定的。这里我写个简单的演示程序:
var a={
property:"property",
},b={};
//假复制
b=a;//复制,引用传递
b.property="change";//a.property值也为"change"了。
//真复制。
var c={};
a.property="back";
for(var item in a){
if(a.hasOwnProperty(item)){
c[item]=a[item];
}
}
c.property="changeagain";//a.property还是为back
在这里要注意的是,我们这里的c对象,不能用b对象代替,因为之前b对象已经被引用指向了a。你现在仍和改动,他默认都是会指向a的,所以如果你用b对象的话,会发现,什么都没有变。
作者:AnyKoro
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。