我正在编写nodejs应用程序.它基于expressjs.我对在nodejs模块中进行继承感到困惑.我想要做的是创建一个模型基类,让我们说my_model.js.
module.exports = function my_model(){
my_model.fromID = function(){
//do query here
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在我的其他模型类中的my_model中使用这些方法.让我们说user_model.js如何在user_model中继承my_model?
far*_*jad 40
在base_model中:
function BaseModel() { /* ... */ }
BaseModel.prototype.fromID = function () { /* ... */ };
module.exports = BaseModel;
Run Code Online (Sandbox Code Playgroud)
在user_model中:
var BaseModel = require('relative/or/absolute/path/to/base_model');
function UserModel() {
UserModel.super_.apply(this, arguments);
}
UserModel.super_ = BaseModel;
UserModel.prototype = Object.create(BaseModel.prototype, {
constructor: {
value: UserModel,
enumerable: false
}
});
UserModel.prototype.yourFunction = function () { /* ... */ };
module.exports = UserModel;
Run Code Online (Sandbox Code Playgroud)
Object.create()
您也可以使用util.inherits而不是直接使用,因此您user_model
将成为:
var BaseModel = require('relative/or/absolute/path/to/base_model'),
util = require('util');
function UserModel() {
BaseModel.apply(this, arguments);
}
util.inherits(UserModel, BaseModel);
UserModel.prototype.yourFunction = function () { /* ... */ };
module.exports = UserModel;
Run Code Online (Sandbox Code Playgroud)
cma*_*mac 16
对于ES6,不鼓励使用util.inherits()以支持ES6 类并进行扩展
const EventEmitter = require('events');
class MyStream extends EventEmitter {
constructor() {
super();
}
write(data) {
this.emit('data', data);
}
}
const stream = new MyStream();
stream.on('data', (data) => {
console.log(`Received data: "${data}"`);
});
stream.write('With ES6');
Run Code Online (Sandbox Code Playgroud)
使用utility.inherits
还可以帮助你解耦child
从parent
.
parent
您可以使用super_
来调用父级,而不是显式调用.
var BaseModel = require('relative/or/absolute/path/to/base_model'),
util = require('util');
function UserModel() {
this.super_.apply(this, arguments);
}
util.inherits(UserModel, BaseModel);
Run Code Online (Sandbox Code Playgroud)
utility.inherits
资源:
var inherits = function (ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false
}
});
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33335 次 |
最近记录: |