美文网首页
JS中的继承

JS中的继承

作者: 饕餮潴 | 来源:发表于2019-03-26 16:02 被阅读0次

    js并不是想java一样面向对象,而是基于对象,所以js是通过prototype的原型链继承

    prototype

    function Human(name){
      this.name=name
    }
    Human.prototype.run=function(){
      console.log("我叫“+this.name+",我在跑")
      return undefined
    }
    function Man(name){
      Human.call(this.name)
      this.gender='男'
    }
    var f=funticon(){
    f.prototype=Human.prototype
    Man.prototype=new f()
    
    Man.prototype.fight=function(){
      console.log('啪啪打脸')
    }
    

    class 语法糖 (es6)

    class Human{
        construction(name){
            this,name=name
        }
        run(){
              console.log("我叫“+this.name+",我在跑")
              return undefined
              }
      }
    class Man extends Human{
      construction(name){
          super(name)
        this.gender='男'
       }
      fight(){
            console.log('啪啪打脸')
      }
    }
    
    

    原型链继承

    优点:

    • 非常简便的实现了多重继承的关系;
    • 能够确定原型和实例之间的关系;

    缺点:

    • 创建子类型实例时,无法向父类型传递参数,尤其是多重继承时,弊端非常明显;
    • 所有的实例会共享通过原型链继承的属性,在一个实例中改变了,会在另一个实例中反映出来;
    • 不能使用字面量添加新方法,会使继承关系中断(会重写constructor属性);

    借用构造函数实现继承

    优点:

    • 可以通过使用call可以在调用的时候向父类型传递参数。

    缺点:

    • 仅仅借用构造函数,方法都在构造函数中定义,就无法实现函数复用;
    • 通过借用构造函数,在父类型原型中定义的方法也无法通过原型链暴露给子类型;

    相关文章

      网友评论

          本文标题:JS中的继承

          本文链接:https://www.haomeiwen.com/subject/meirvqtx.html