Создать класс в NodeJS - PullRequest
       1

Создать класс в NodeJS

5 голосов
/ 28 ноября 2011

Как я могу создать массив моего класса?

Я вижу это примерно так:

в 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);

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

После exec я получаюошибка

TypeError: объект не является функцией в Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)

Что мне нужно исправить?

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Мне удалось заставить его работать, используя следующее:

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());

На основании прочитанного здесь: http://nodeguide.com/beginner.html#the-module-system, вы добавляете свойства в объект экспорта и используете их какнапример.Я не уверен, что созданный объект зарезервирован, но я обнаружил, что он мне не нужен.

1 голос
/ 28 ноября 2011

Измените эти строки:

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

к этому:

module.exports = mySuperClass;

Функция require возвращает значение модуля module.export. Если вы установите это значение для конструктора вашего класса, он вернет тот конструктор, который вы можете использовать, как в своем примере использования.

В настоящее время вы пытаетесь вызвать в качестве конструктора объект, похожий на { create: function () { ... }, _class: function (ar) { ... } } (значение module.exports в вашей функции). Этот объект не является функцией, поэтому об этом сообщается в сообщении об ошибке.

Однако одно только это решение не сделает ваш класс функционирующим должным образом (если я правильно понимаю, что должен делать ваш класс), потому что экземпляры класса совместно используют глобальную переменную _i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...