如何在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
也可以帮助你解除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);
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');