Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a class in NodeJS

How can I create an array of my class?

I see it something like this:

in main.js

....
mySuperClass = require('./mySuperClass.js');
objArray = new Object();
...
objArray["10"] = new mySuperClass(10);
console.log(objArray["10"].getI);
objArray["20"] = new mySuperClass(20);
console.log(objArray["20"].getI);
objArray["30"] = new mySuperClass(30);
console.log(objArray["30"].getI);

in mySuperClass.js

var _i = 0;
var mySuperClass = function(ar) {
_i = ar;
}

mySuperClass.prototype.getI = function()
{
  return _i
}
module.exports.create = function() {
  return new mySuperClass();
}
module.exports._class = mySuperClass;

After exec, I get an error

TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)

What I need to correct?

like image 777
user1069386 Avatar asked Oct 09 '22 09:10

user1069386


1 Answers

I was able to get it to work by using the following:

var _i = 0;
var mySuperClass = function(ar) {
_i = ar;
}

mySuperClass.prototype.getI = function()
{
  return _i
}
/*module.exports.create = function() {
  return new mySuperClass();
} */
module.exports.mySuperClass = mySuperClass;

module = require('./myclass.js');
objArray = new Object();
objArray["10"] = new module.mySuperClass(10);
console.log(objArray["10"].getI());
objArray["20"] = new module.mySuperClass(20);
console.log(objArray["20"].getI());
objArray["30"] = new module.mySuperClass(30);
console.log(objArray["30"].getI());

Based on what I read here: http://nodeguide.com/beginner.html#the-module-system, you add properties to the export object, and use them as such. I'm not sure if the create one is reserved, but I found that I didn't need it.

like image 76
agmcleod Avatar answered Oct 13 '22 11:10

agmcleod