关于ES6中,类的继承中super的问题
发布于 5 年前 作者 Limiandy 4581 次浏览 来自 问答

有下面三段代码: 父类:

class BaseDao {
  /**
   * 子类构造传入对应的 Model 类
   *
   * @param Model
   */
  constructor (Model) {
    this.Model = Model
  }

  /**
   * 使用 Model 的 静态方法 create() 添加 doc
   *
   * @param obj 构造实体的对象
   * @returns {Promise}
   */
  create (obj) {
    return new Promise((resolve, reject) => {
      let entity = new this.Model(obj)
      this.Model.create(entity, (error, result) => {
        if (error) {
          console.log('create error--> ', error)
          reject(error)
        } else {
          console.log('create result--> ', result)
          resolve(result)
        }
      })
    })
  }

子类:

let BaseDao = require('./lib/baseDao')
let Usr = require('./usr')

class UsrDao extends BaseDao {
  constructor () {
    super(Usr)
  }
}


var andy = new Usr({usrname: 'andy', pwd: '123456'})

var usrDao = new UsrDao()

usrDao.create(andy)
module.exports = UsrDao

model:

var {Schema} = require('mongoose')
var {mongoClient} = require('./lib/mongo')

var usrSchema = new Schema(
  {
    usrname: String,
    pwd: {type: String, lowercase: true} // lowercase 都属于 setters
  },
  {
    runSettersOnQuery: true // 查询时是否执行 setters
  }
)

var Usr = mongoClient.model(`Usr`, usrSchema, 'usr')

module.exports = Usr

我的问题是:子类继承了父类,父类的构造方法中需要传入一个model,那么在子类中,super(Usr),这句代码是什么意思呢,是将Usr传入了父类还是构造了一个Usr类,还是发生了其它的什么事情?希望可以被解达。谢谢。

5 回复

调用了父类的构造函数

@hyj1991 首先感谢你的解达,这里调用了父类的构造方法,我是知道的,我主要不明白的地方是,传入的这个Usr,是什么意思


  constructor (Model) {
    this.Model = Model
  }
  
  Usr 等于这块的 Model, 为了能 create 的时候能正确工作

@Limiandy super 指向父类的构造函数。如果你记得 super() 表示调用了父类的构造函数,那 super(Usr) 中的 Usr 当然就是传入构造函数的参数了

@rrbe 谢谢! 那么这里我不是不可以这么理解呢,Usr,就是一个用户类,当传入构造方法中时就是新建了一个用户对象,var andy = new Usr({usrname: ‘andy’, pwd: ‘123456’}),这句话就是实例化这个对象。

回到顶部