如何在node.js模块中实现inheritance?

我正在编写nodejs应用程序。 它基于expressjs。 我很困惑在nodejs模块中进行inheritance。 我想要做的是创build一个模型基类,让我们说my_model.js。

module.exports = function my_model(){ my_model.fromID = function(){ //do query here } } 

现在我想在my_model中的其他模型类中使用这些方法。 比方说user_model.js我如何inheritanceuser_model的my_model?

在base_model中:

 function BaseModel() { /* ... */ } BaseModel.prototype.fromID = function () { /* ... */ }; module.exports = BaseModel; 

在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; 

直接使用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; 

使用utility.inherits也可以帮助你解除childparent

不要显式地调用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); 

utility.inherits来源:

 var inherits = function (ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false } }); }; 

在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');