JS中的继承

1. prototype实现继承

function Human(name){
  this.name=name
}
Human.prototype.run=function(){
  console.log('跑')
}

function Man(name){
  Human.call(this,name)
  this.gender='男'
}

function f(){}
f.prototype=Human.prototype
Man.prototype=new f()
Man.prototype.constructor=Man

由于IE不支持Man.prototype.proto=Human.prototype这种写法,所以我们通过创建一个空的构造函数,让这个函数的prototype指向Human.prototype,然后让Man.prototype等于这个空函数的实例,实现了原型链的继承。

2. class继承

class Human{
  constructor(name){
    this.name=name
  }
  run(){
    console.log('跑')
  }
}
class Man extends Human{
   constructor(name){
    super(name)
    this.gender='男'
   }
  fight(){
    console.log('打架')
  }
}

这种写法的优点是写起来比上面方便,缺点是原型链上的属性值只能是函数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在上一篇 JS中的继承(上) 我们介绍了3种比较常用的js继承方法,如果你没看过,那么建议你先看一下,因为接下来要...
    noahlam阅读 1,768评论 0 0
  • 要使一个子类继承父类,需要两步实现:第一:继承父类自身的属性和方法第二:继承父类原型上的方法 "父类自身"属性和方...
    放风筝的小小马阅读 1,475评论 0 0
  • JS中的继承(上) 学过java或者c#之类语言的同学,应该会对js的继承感到很困惑--不要问我怎么知道的,js的...
    noahlam阅读 2,578评论 0 1
  • 在了解了js 中的原型链之后 (https://www.jianshu.com/p/1e683a9771c3),我...
    施主画个猿阅读 2,372评论 0 1
  • 背景 好久都没有写原生的js了。突然发现自己对一些基础概念有些生疏了,故以红宝书为基础,总结下相关的基础知识。 原...
    简码书阅读 1,378评论 0 3