如何给飞构造函数实现继承??
var Chinese = {
nation:'中国'
};
var Doctor ={
career:'医生'
};
//1:创建一个方法
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
var Doctor = object(Chinese);
Doctor.career = '医生';
console.log(Doctor);
//实质上还是通过构造函数进行返回 另外还多了一步添加career这个属性给Doctor,因为他被object(Chinese)给重新赋值了
2.浅拷贝 就是利用for in 遍历赋值
function extendCopy(p){
var c={};
for(var i in p){
c[i]=p[i]
}
c.uber= p;
return c;
}
//但是,这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对 象被篡改的可能。请看,现在给Chinese添加一个"出生地"属性,它的值是一个数组。
Chinese.birthPlaces = ['北京','上海','香港'];
var Doctor = extendCopy(Chinese);
Doctor.birthPlaces.push('厦门');
console.log(Doctor.birthPlaces); //北京, 上海, 香港, 厦门
console.log(Chinese.birthPlaces); //北京, 上海, 香港, 厦门
//这里不做过多的解释,可以看第二遍中的案例说明
3.深拷贝(实现上就是做判断,如果是属性是一个对象或者数组的时候,再进行遍历)
function deepCopy(c,p){
var c=c||{};
for(var i in p){ //开始循环遍历
if(typeof p[i] ==='object'){ //判断是不是一个对象(数组也是对象类型)
c[i]=(p[i].constructor === Array)?[]:{}; //使用三元运算:通过constructor找它的构造函数是Object还是Array
deepCopy(c[i],p[i]) //如果是复杂数据类型 为了防止他内部嵌套的有数组或者对象 再遍历
}
else{
c[i]=p[i] //遍历到最后不是复杂数据类型了就赋值
}
}
return c
}