浅谈js中的浅拷贝和深拷贝

在js中如何把一个对象里的属性和方法复制给另一个对象呢?

下面举一个例子来说明:

var person={name:'chen',age:18};

var son={sex:'男'};

function clone(p,s){

  var s=s||{};//判断s对象是否存在,不存在则定义s为空对象

  for(var prop in p){

    s[prop]=p[prop];

};

    return s;//返回s对象

};

clone(person,son);

调用clone函数最终返回的结果为 {sex: "男", name: "chen", age: 18}.

但是假如 var person={name:'chen',age:18,man:{hight:188}};即person 对象里包含一个子对象man;

那么在复制时浅拷贝只是将子对象的一个引用地址复制给son对象;son和person里的man 属性都指向同一个对象,故改变任一个都能影响到另外一个:例子如下:

var person={name:'chen',age:18,man:{hight:188}}

var son={sex:'男'};

function clone(p,s){

  var s=s||{};//判断s对象是否存在,不存在则定义s为空对象

  for(var prop in p){

    s[prop]=p[prop];

};

    return s;//返回s对象

};

clone(person,son);

son.name='ze';

console.log(son.name);//打印ze

console.log(person.name);//打印chen

son.man.hight=1999;

console.log(son.man.hight);//打印1999

console.log(person.man.hight);//打印1999

上一篇:C语言学习笔记--字符串


下一篇:《PHP程序设计》读书笔记