ES5继承
/**
* 继承大体分为俩种:
* 构造函数继承
* 原型继承
* - 拷贝继承
* -深拷贝
* -浅拷贝
* - 原型链继承
**/
function Person(name,age){
this.name = name;
this.age = age
}
Person.prototype.sayName = function(){
console.log(this.name)
}
//构造函数继承
function Person1(name,age,sex){
Person.call(this,name,age);
this.sex = sex;
}
//原型链继承 : 但我们在调用对象的属性和方法的时候,如果这个对象没有,就去原型链上查找
function extend(c){
function p(){}; //这个构造函数是空的,这样就不会有多余的一些东西了
p.prototype = c.prototype;
return new P;
}
Person1.prototype = extend(Person);
Person1.prototype.constructor = Person1;
//浅拷贝:拷贝基本类型,复合类型会拷贝地址,复制第一层
for(let attr in Person.prototype){
Person1.prototype[attr] = Person.prototype[attr];
}
//深拷贝:每层都拷贝
function extend(data){
if(typeof data === 'object'){
let val = typeof data.length === 'number' ? [] : {};
for(var s in data){
val[s] = extend(data[s]);
}
return val;
}else{
return data;
}
}