JavaScript OOP in NodeJS: how?
This is an example that works out of the box. If you want less "hacky", you should use inheritance library or such.
Well in a file animal.js you would write:
var method = Animal.prototype;function Animal(age) { this._age = age;}method.getAge = function() { return this._age;};module.exports = Animal;
To use it in other file:
var Animal = require("./animal.js");var john = new Animal(3);
If you want a "sub class" then inside mouse.js:
var _super = require("./animal.js").prototype, method = Mouse.prototype = Object.create( _super );method.constructor = Mouse;function Mouse() { _super.constructor.apply( this, arguments );}//Pointless override to show super calls//note that for performance (e.g. inlining the below is impossible)//you should do//method.$getAge = _super.getAge;//and then use this.$getAge() instead of super()method.getAge = function() { return _super.getAge.call(this);};module.exports = Mouse;
Also you can consider "Method borrowing" instead of vertical inheritance. You don't need to inherit from a "class" to use its method on your class. For instance:
var method = List.prototype; function List() { } method.add = Array.prototype.push; ... var a = new List(); a.add(3); console.log(a[0]) //3;
As Node.js community ensure new features from the JavaScript ECMA-262 specification are brought to Node.js developers in a timely manner.
You can take a look at JavaScript classes. MDN link to JS classes In the ECMAScript 6 JavaScript classes are introduced, this method provide easier way to model OOP concepts in Javascript.
Note : JS classes will work in only strict mode.
Below is some skeleton of class,inheritance written in Node.js ( Used Node.js Version v5.0.0 )
Class declarations :
'use strict'; class Animal{ constructor(name){ this.name = name ; } print(){ console.log('Name is :'+ this.name); }}var a1 = new Animal('Dog');
Inheritance :
'use strict';class Base{ constructor(){ } // methods definitions go here}class Child extends Base{ // methods definitions go here print(){ }}var childObj = new Child();
I suggest to use the inherits
helper that comes with the standard util
module: http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor
There is an example of how to use it on the linked page.