关于引入EventEmitter对象的方法的方式
发布于 12 年前 作者 hopehack 6692 次预览 最后一次回复是 12 年前 来自
构造函数中使用如下代码:
events.EventEmitter.call(this);
另外的方式:
util.inherits(appDAO, events.EventEmitter);
这两种方式是否重复?
原始代码如下:
function appDAO(config){
if(config){
db_option = config;
}
else{
db_option = new db_config();
}
events.EventEmitter.call(this);
logger.debug(db_option);
pool = mysql.createPool(db_option);
//设置mysql连接池单次最大连接数,默认10
//pool.connectionLimit(10);
//设置连接池最大请求队列长度,默认0,即不限制.如果设置了则超过长度时getConnection会返回错误
//pool.queueLimit(0);
logger.info('init mysql pool');
}
//继承events模块,用于处理消息
util.inherits(appDAO, events.EventEmitter);
外部引用appDAO来调用EventEmitter的方法。
我觉得这其中一个语句是没有必要的,不知道我理解的对不对
8 回复
Example:
all should use.
只用其中一句效果也是一样吧?
@hopehack
no, must all.
是有点怪, 不过看源码还是能理解…
.call只是绑定方法, 而.inherents将.prototype指向父类:还是没说明白啊~ 如果单个使用inherents不是就可以了吗?
@hopehack 很可能不够的… 一般的比我创建一个类, 可能是这样写:
其中
new的作用, 一个是处理原型链, 一个是初始化变量this.name对照上边的.inherits的代码, 只是绑了原型链, 没有初始化变量… 而.call的调用就是做了这一步, 往this上写数据. 那么在一般的场景里, 很多都有初始化变量的步骤, 那一句就不够了-. - 我都是inherits继承的
also correct, but best both. because need
instanceofsometimes.EventEmitter new version is corrent, old version must both.