2014-11-11 4 views
1

я сделал класс в моем NodeJS приложении и использовал module.exports вместе с require() заявления, чтобы привести его в мой основной сценарий сервера:NodeJS прототипирование с module.exports

// ./classes/clientCollection.js 
module.exports = function ClientCollection() { 
    this.clients = []; 
} 

// ./server.js 
var ClientCollection = require('./classes/clientCollection.js'); 
var clientCollection = new ClientCollection(); 

Теперь я хотел бы добавить функций на мой класс, как так:

ClientCollection.prototype.addClient = function() { 
    console.log("test"); 
} 

Однако, когда я делаю это я получаю следующее сообщение об ошибке:

ReferenceError: ClientCollection is not defined 

Как правильно добавить функции в класс с использованием прототипирования в приложении NodeJS?

ответ

3

Я думаю, что вам нужно.

function ClientCollection (test) { 
    this.test = test; 

} 

ClientCollection.prototype.addClient = function() { 
    console.log(this.test); 
} 

module.exports = ClientCollection; 

или

function ClientCollection() { 

} 

ClientCollection.prototype = { 
     addClient : function(){ 
      console.log("test"); 
     } 
} 

module.exports = ClientCollection; 
+0

'Я думаю, что вам нужен конструктор. У него был конструктор. – Brandon

+0

http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know – vcrzy

1

По различным причинам, эта структура:

module.exports = function ClientCollection() { 
    this.clients = []; 
} 

не определяет символ ClientCollection за пределами самой функции, так что вы не можете обратиться к нему в другом месте модуль для добавления к прототипу. Таким образом, вместо этого вам необходимо определить его за пределами, а затем назначить для экспорта:

function ClientCollection() { 
    this.clients = []; 
} 

ClientCollection.prototype.addClient = function() { 
    // code here 
} 

module.exports = ClientCollection; 
Смежные вопросы