2011-11-28 29 views
5

¿Cómo puedo crear una matriz de mi clase?Crear una clase en NodeJS

lo veo algo como esto:

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

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

Después ejecutivo, me sale un error

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

Lo que necesito corregir t?

+0

oh, lo siento :(Mi error ... me olvido de .create() ... – user1069386

Respuesta

3

que era capaz de conseguir que funcione mediante el uso de lo siguiente:

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

Sobre la base de lo que he leído aquí: http://nodeguide.com/beginner.html#the-module-system, que añaden propiedades al objeto de exportación, y utilizarlos como tales. No estoy seguro si el crear es reservado, pero encontré que no lo necesitaba.

1

cambiar estas líneas:

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

a este:

module.exports = mySuperClass; 

El requieren función devuelve el valor del módulo de module.export. Si establece este valor para el constructor de su clase, devolverá ese constructor que puede usar como en su ejemplo de uso.

Actualmente está intentando llamar a un objeto que es algo así como { create: function() { ... }, _class: function (ar) { ... } } (el valor de module.exports en su función) como un constructor. Este objeto no es una función, por lo que el mensaje de error te lo dice.

Sin embargo, esta solución por sí sola no hará que su clase funcione como se espera (si entiendo correctamente lo que su clase debe hacer), porque las instancias de clase comparten la variable global _i.

Cuestiones relacionadas