JS 中继承的写法

es5:

function Human(name){
  this.name = name
}

Human.prototype.move = function(){}

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

Man.prototype.__proto__ === Human.prototype // 兼容性有问题
// 解决方案
var f = function(){}
f.prototype = Human.prototype 
Man.prototype = new f()  

Man.prototype.fight = function(){}

es6: class

class Human {
  constructor(name) {
    this.name = name
  }
  move() {
    console.log('动')
  }
}

class Man extends Human {
  constructor() {
    super()
    this.gender = '男'
  }
  fight() {
    console.log('吃我一拳')
  }
}

在原型上声明一个不是函数的属性:
es5:Human.prototype.race = '人类'
es6:

class Human {
  constructor(name) {
    this.name = name
  }
 race: '人类' // 不支持这样写法,会报语法错误
}
// 变通写法,
class Human {
  constructor(name) {
    this.name = name
  }
  get race(){
    return '人类'
  }
}

总结:
es5的写法稍微复杂一点,但是理解起来简单,看起来更舒服。而es6写法简单,但是更加抽象。
假设把Object和Aaary看作一个类,那么Object和Aaary有什么关系吗?答案是没有。但是Object的prototype和Aaary的prototype有一个关系,那就是JS里面有一个重要的原则,就是所有的类,所有的对象都是从new Object构造出来的。
在JS中继承的实质就是两次的原型链搜索。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别B“继承自”另一个类...
    hzl的学习小记阅读 3,318评论 0 0
  • 继承是面向对象编程很重要的一个方面,让子类继承父类的某些属性和方法,是非常常见的需求。 prototype写法 假...
    灵魂治愈阅读 1,697评论 0 0
  • 继承的两种写法 i.Prototype 写法 ii.Class写法 iii.两种方法的区别 两种方法都能实现继承,...
    成成成汤阅读 1,684评论 0 0
  • 继承是类和类之间的关系,继承使得子类别具有父类别的属性和方法。 js里常用的如下两种继承方式: 原型链继承(对象间...
    遠_阅读 4,130评论 0 0
  • 使用 prototype 如何继承 使用 class 语法糖如何继承 ``` class Human{ ...
    追夢的蚂蚁阅读 1,585评论 0 0

友情链接更多精彩内容