我们知道对象的赋值实际上是赋值它的应用,并没有产生对象的副本。
如:
var p1={x:1,y:2};
var p2=p1;
p2.x ++;
alert(p1.x); //得出的结果是2,改变p2.x的值,p1.x的值随之改变。
当然可以重新new一个对象,但是这样就不是拷贝了。
可以用闭包做一个拷贝:
function Point(x,y){
this.x=x;
this.y=y;
this.clone=function(){
return new point(x,y);
}
}
var p1=new Point(1,2);
var p2=p1.clone();
通过闭包再利用p1的构造函数,这样的好处是我们并不需要理会p1的真正属性,只需要把构造函数的参数在clone闭包中原封不动的再传递一次即可。