关于ES6中,类的继承中super的问题
有下面三段代码: 父类:
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’}),这句话就是实例化这个对象。