ES6 的 class

最近又重构了 indexedDB 的封装,因为原来用的 class 的方式封装的,虽然实现了功能,但是感觉挺别扭的。

重构的时候就要考虑代码结构的问题,于是又遇到了class、继承还是组合这个老问题上面来。

首先复习一下继承的写法,es5的实在太绕,晕晕的,直接用es6的。

es6 的class 和继承

class base {
  constructor(name, age){
    this.name = name
    this.age = age
  }
  
  fun1 (msg){
    console.log('base 的 this===', this, msg)
  }
}

class person extends base {
  constructor(name, age, date){
    super(name, age)
    this.birthday = date
  }

  fun2 (msg){
    console.log('person 的 this ===', this, msg)
  }
}

class man extends person {
  constructor(name, age, date){
    super(name, age)
    this.birthday = date
  }

  fun3 (msg){
    console.log('jim 的 this ===', this, msg)
  }
}

const base1 = new base('jyk', 20)
const person1 = new person('jyk1', 22, 123)
const man1 = new man('jyk11', 222, 1232)

console.log('base1', base1)
console.log('person1', person1)
console.log('jim1', man1)

base1.fun1('父类调用 fun1')
// base1.fun2('父类调用 fun2')
person1.fun1('子类调用 fun1')
person1.fun2('子类调用 fun2')

似乎可以无限继承下去,不过这个不重要,如何使用达到目的才是重点。

es6 的 class 和继承

基类的两个属性 + 自己的函数 fun1,没有问题。

子类的三个属性 + 自己的函数 fun2,继承父类的fun1,好吧,其实有两个属性是继承自父类,不过没有放在原型里面,而是和自己的属性放在了一个级别里面。

子子类也是一样,属性都在一个级别里面,函数按照原型链的形式依次向上寻找。

this

this 的情况

父类的 this 并不是固定不变的,而是看实力,自己的实例,this 只有自己的属性,子类的实例,在父类里面看this,却包含了子类的属性。

这个和面向对象的类就不一样了,有点晕晕。

用处

好吧,其实还是没有想出了,用类的好处到底是什么,可能是习惯问题吧,我不太喜欢用继承,封装indexedDB 的时候,只是简单用了 class,其实和类也没啥关系。

然后代码组织方面,还是感觉分成多个js文件来写,比较容易维护,一个js文件只有一个小功能,虽然文件多,但是不用怕,反正有webpack或者其他方式把分散的文件组合起来。

关键是,逻辑上如何整合这些分散的代码。

目前还是没想好,用的是比较笨的方法。


class base {
  constructor(name, age){
    this.name = name
    this.age = age
  }
  
  fun1 (msg){
    console.log('base 的 this===', this, msg)
  }

  fun666 = (arg1) => 引入的函数(this, arg1)

  fun888 (arg1) {
    return 引入的函数(this, arg1)
  }
}

好像有点傻,只是没有想出来更好的方法。

先这样吧,以后再说。

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

相关阅读更多精彩内容

  • 继承6种套餐 参照红皮书,JS继承一共6种 1.原型链继承 核心思想:子类的原型指向父类的一个实例 Son.pro...
    灯不梨喵阅读 3,269评论 1 2
  • 来持续学习吧! 此前写了两篇关于 JavaScript 原型以及继承的文章(源自 ULIVZ[https://ju...
    越前君阅读 282评论 0 1
  • ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型...
    SunshineBrother阅读 161评论 0 0
  • [转]ES6 Class基本语法 注:本文为转载文章但是我又在此基础上进行修改的添加 简介 严格模式 constr...
    随Sir阅读 854评论 0 0
  • 在ES5中,我们经常使用方法或者对象去模拟类的使用,并基于原型实现继承,虽然可以实现功能,但是代码并不优雅,很多人...
    深度剖析JavaScript阅读 580评论 0 6

友情链接更多精彩内容