// 1、原型链继承
// function Person(name,sex){
// this.name = 'person'
// this.sex = 'person'
// this.color=['pink','red','black']
// }
// function Male(){
// }
// Male.prototype = new Person();
// Male.prototype.constructor = Male;
// let m1 = new Male()
// let m2 = new Male()
// //原型链继承 :
// //问题:1、作为原型对象的构造函数的引用对象是共享的
// //2、没有办法通过构造函数传参数
// console.log(m1.color)
// m1.color.push('aaa')
// console.log(m1.color)
// console.log(m2.color)
//《----------------------》
//2、构造函数继承(经典继承)
// function Person(name,sex){
// this.name = 'person'
// this.sex = 'person'
// }
// function Male(){
// Person.call(this)
// this.sex = 'male'
// }
//经典继承 console.log(m1)
//《----------------------》
//3、组合继承:1、2的结合
// function Person(name,sex){
// this.name = 'person'
// this.sex = 'person'
// this.color=['pink','red','black']
// }
// function Male(){
// Person.call(this);
// }
// Male.prototype = new Person();
// Male.prototype.constructor = Male;
// let m1 = new Male()
// let m2 = new Male()
// console.log(m1.color)
// m1.color.push('aaa')
// console.log(m1.color)
// console.log(m2.color)
//4、原型式继承
//实际上就是Object.create的实现,将传入的对象作为创建的对象的原型
//问题也是引用类型互相影响的问题
// function Person(name,sex){
// this.name = 'person'
// this.sex = 'person'
// this.color=['pink','red','black']
// }
// function createSon(o){
// function Son(){
// this.name='son'
// }
// Son.prototype = o;
// return new Son();
// }
// let p =new Person()
// let son1 = createSon(p);
// let son2 = createSon(p);
// console.log(son1.name)
// son1.color.push('sss')
// console.log(son1.color)
// console.log(son2.color)
// let son3 = createSon(new Person());
// let son4 = createSon(new Person());
// console.log(son3.color)
// son3.color.push('sss')
// console.log(son3.color)
// console.log(son4.color)
//5、寄生继承
// function createobj(o){
// let clone = Object.create(o);
// clone.hi =function(){
// console.log('hi')
// }
// return clone
// }
// function Person(name,sex){
// this.name = 'person'
// this.sex = 'person'
// this.color=['pink','red','black']
// }
// let p1 = createobj(new Person());
// p1.hi()
// 6、寄生组合继承
// function object(o){
// function F(){}
// F.prototype = o;
// return new F();
// }
// function prototype(child,parent){
// let prototype = object(parent.prototype);
// console.log(object(parent.prototype),'object(parent.prototype)')
// prototype.constructor = child;
// child.prototype = prototype;
// }
// function Child(){
// this.name='child'
// }
// function Parent(){
// this.name='parent'
// this.a='a'
// }
// prototype(Child,Parent);
// let c1 = new Child();
// console.log(c1.a)
console