继承会涉及到传值和传址问题!!!
什么类型会涉及到传址问题?
除了简单数据类型(基本数据类型)外都会涉及到传址问题
简单数据类型(基本数据类型):Number、String、Boolean、Null、Undefined
复杂数据类型:Array、Object、Function、Date、Math、RegExp等
解决方案
1、JSON序列化
let SonProto = JSON.parse(JSON.stringifg(DadProto));
缺点:深拷贝的对象中包含函数、undefined等值,此方法会出问题,出现函数丢失。
2、写一个深拷贝函数
//递归深拷贝
function deepCopy(obj){
let newObj = Array.isArray(obj)?[]:{};
for(let key in obj){
if(obj.hasOwnProperty(key)){
if(typeof obj[key] == "object"){
newObj[key] = deepCopy(obj[key]);
}else{
newObj[key] = obj[key];
}
}
}
return newObj;
}
3、组合继承
function Dad(){
this.name = "张三";
}
Dad.prototype.hobby = function(){
console.log("喜欢篮球");
}
function Son(){
Dad.call(this);
}
let F = function(){}
F.prototype = Dad.prototype;
Son.prototype = new F();
Son.prototype.constructor = Son;
let newSon = new Son();
newSon.hobby();