定义继承有哪些方式
     1.原型链继承
     function Father(){
         this.color=["red","blue"]
     }
     function Son(){
         
     }
     Son.prototype=new Father()
     var s1=new Son()
     var s2=new Son()
     s1.color.push("green")
     console.log(s1.color)
     console.log(s2.color)
     优点:可以复用父类下的属性和方法
     缺点:不能给父类的变量传值,属性被孩子共享,一个改变全部改变
     2.构造函数继承
     function Father(name){
         this.color=["red","blue"]
         this.name=name
     }
     function Son(name){
         Father.call(this,name)
     }
     var s1=new Son()
     var s2=new Son()
     s1.color.push("green")
     console.log(s1.color)
     console.log(s2.color)
     优点:父类下的数据不被共享,子类可以借助父类构造器赋值
     缺点:无法实现代码复用,每一个孩子赋值父类的副本
     3.组合继承
     function Father(name){
         this.name=name//借用的
     }
     function Son(name){
         Father.call(this,name)
     }
     Father.prototype.color=["red","blue"]//共享的
     Son.prototype=new Father()
     优点:既可以找到原型上的属性和方法继承,又可以给父类进行传参
     缺点:每创建一个新对象,多次调用父类构造器,会在内存中生成多个,浪费资源
     4.原型模式继承
     var Father={color:["red","blue"]}
     function person(obj){
         function F(){}
         F.prototype=obj
         return new F()
     }
     var s1=person(Father)
     var s2=person(Father)
     s1.color.push("green")
     console.log(s1.color)
     console.log(s2.color)
     优点:可以复用父类下的属性和方法
     缺点:不能给父类变量传值,属性被孩子对象所共享,一个改变全部改变
     5.寄生继承模式
     var Father={color:["red","blue"]}
     function person(obj){
         function F(){}
         F.prototype=obj
         var f=new F()
         f.say=function(){ console.log(this.color) }
         return f
     }
     var s1=person(Father)
     优点:可以复用父类下的属性和方法,是原型模式的增强版,可以自己新增属性和方法
     缺点:不能给父类变量传值,属性被孩子对象所共享,一个改变全部改变
     6.寄生组合继承(最好,无缺点)
     function Father(name){
         this.name=name
     }
     Father.prototype.color=["red","blue"]
     function Son(name){
         Father.call(this,name)
     }
     function fun(son,father){
         son.prototype=Object.create(Father.prototype)
         son.prototype.constructor=son
     }
     fun(Son,Father)
     var s1=new Son("asd")
     var s2=new Son("zsx")
     s1.color.push("green")
     console.log(s1.color)
     console.log(s2.color)
     优点:可以借助父类构造器,可以共享原型上的数据,可以创建不同实例对象,可以实现深拷贝,解决了资源浪费










