0
点赞
收藏
分享

微信扫一扫

web第九天

程序员阿狸 2022-02-22 阅读 72
前端

定义继承有哪些方式
    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)
    优点:可以借助父类构造器,可以共享原型上的数据,可以创建不同实例对象,可以实现深拷贝,解决了资源浪费

举报

相关推荐

第九天打卡

HCIP第九天

第九天笔记

前端第九天

HCIP第九天笔记

0 条评论