一、浅拷贝
var person = {
name:"cj",
age:22,
address;{
home:"home address",
office:"office address"
},
schools:["xiaoxue","daxue"]
}
var programer = {
language:"javascript"
}
function extend(p, c){
var c = c || {};
for(var prop in p){
c[prop] = p[prop];
}
}
extend(person,programer)
弊端:给一个赋值会影响另一个
二、深拷贝
var person = {
name:"cj",
age:22,
address;{
home:"home address",
office:"office address"
}
}
var programer = {
language:"javascript"
}
function extendDeeply(p,c){
var c = c||{};
for(var prop in p){
if(typeof p[prop]===“object”){
c[prop] = (p[prop].constructor ===Array)?[]:{};
extendDeeply(p[prop],c[prop])
}else{
c[prop]=p[prop]
}
}
}
extendDeeply(person,programer)
三、call拷贝
function Parent(){
this.name = "abc";
this.address = {home:"home"};
}
function Child(){
Parent.call(this);
this.language = "java";
}
四、create
var p = {name:"cj"};
function myCreate(p){
var ins;
ins = {};
function F(){}; //ins.__protp__ = p;
F.prototype = p;
ins = new F();
return ins;
}