JS中的继承

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可以在调用的时候向父类型传递参数。

缺点:

  • 仅仅借用构造函数,方法都在构造函数中定义,就无法实现函数复用;
  • 通过借用构造函数,在父类型原型中定义的方法也无法通过原型链暴露给子类型;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 方式一、原型链继承 分析: 这种方式实现的本质是通过将子类的原型指向了父类的实例,子类的实例就可以通过proto访...
    tency小七阅读 249评论 0 0
  • 选择一种继承方式 JavaScript 是一门动态语言,动态意味着高灵活性,而这尤其可以体现在继承上面。JavaS...
    George_Wm阅读 1,556评论 0 0
  • # 概述 本文主要记录js中实现继承的几种方法的实现,优缺点分析 # 知识铺垫 + **构造函数,原型和实例的关系...
    HLE阅读 652评论 0 0
  • JS中的继承(上) 学过java或者c#之类语言的同学,应该会对js的继承感到很困惑--不要问我怎么知道的,js的...
    noahlam阅读 334评论 0 1
  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 2,139评论 0 6