美文网首页
class extends语法糖的实质

class extends语法糖的实质

作者: 月肃生 | 来源:发表于2018-10-17 13:13 被阅读16次

class的使用

通过class创建类(实质是函数)

class Person {
  static type='animal'
  constructor(name){
    this.name = name
  }
  getName(){
    return this.name
  }
}
class Chinese extends Person {
  constructor(name, age){
    super(name)
    this.name = name
    this.age = age
  }
}

分析

对js原型链熟悉的人应该能很快理解(ps: js:原型、继承总结)

  1. 原型链的constructor指向函数本身,所以constructor里写的就是函数体内容
  2. getName相当于Person.prototype.getName
  3. static是个提案,相当于Person.type='animal'
  4. super()就是构造继承的Person.apply(this)

源码

通过转成原始代码应该是这样的

function Person(name) {
  this.name = name
}
Person.type = 'animal'
Person.prototype = {
  constructor: Person,
  getName: function(){
    return this.name
  }
}

function Chinese (name, age) {
  Person.apply(this, arguments)
  this.age = age
}

// 组合继承
Chinese.prototype = new Person()

// 寄生组合继承
(function(){
  function Mid(){}
  Mid.prototype = Person.prototype
  Chinese.prototype = new Mid()
  Chinese.prototype.constructor = Mid
})()

Chinese.prototype.constructor = Chinese

相关文章

  • class extends语法糖的实质

    class的使用 通过class创建类(实质是函数) 分析 对js原型链熟悉的人应该能很快理解(ps: js:原型...

  • ES6之class

    class基本语法: 1.实质: ​ class只是一个语法糖,类的所有方法都定义在类的prototype...

  • 如何用ES5语法实现继承

    JS 提供了创建类的语法糖 “class”,以及用与创建子类的关键字 “extends”,那么,问题来了,如果我们...

  • 浅谈ES6 类的原型

    ES6新增了类的概念 , 即关键字 class , 并且也实现了继承 extends 等这样的语法糖, 那么相比于...

  • 2.继承、多态、代码块、单例

    继承 语法格式:public class 子类名 extends 父类名 { ... }Java也是单继承Java...

  • 2019-06-18 JS 中继承的写法

    使用 prototype 如何继承 使用 class 语法糖如何继承 ``` class Human{ ...

  • 33.3、class与对象

    class class是function函数的语法糖,class里的constructor相当构造函数,const...

  • JS原型的面试考点

    class与普通构造函数的区别 class实际上是函数,是语法糖 class在语法上更贴近面向对象的写法。 cla...

  • 45 - ASM之TraceClassVisitor

    TraceClassVisitor class extends the ClassVisitor class, a...

  • Java泛型详解

    1. 泛型多边界 语法 一个 class 边界 + 多个接口边界 第一...

网友评论

      本文标题:class extends语法糖的实质

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