2013-12-10 3 views
0

В настоящее время я пишу Node.js модули, как это:Правильный способ записи и загрузки модулей в node.js?

//MyModule.js 
function MyModule() { 
    ...somecode 
} 

MyModule.prototype.someFunc = function() {...} 
module.exports = MyModule 

Однако, когда мне нужно использовать модуль, я должен написать что-то вроде этого:

//main.js 
var MyModule = require('MyModule'); 
var myModule = new MyModule(); 

Это кажется ужасно некрасиво. Разве нет способа сделать что-то вроде этого

//main.js 
var myModule = require('MyModule').new(); 

Я что-то не так?

+1

Это правильный способ сделать это. (за исключением того, что вам нужно экспортировать конструктор) Что вам не нравится? – SLaks

+2

"Это кажется ужасно уродливым" Добро пожаловать в прототип JavaScript. – MattC

+0

@SLaks Я хотел бы иметь что-то, что автоматически генерирует объект, а не тратить параметр – Yossale

ответ

1

Если ваш модуль состоит только из функций, его, возможно, не нужно создавать как экземпляр - просто определите свой модуль как объект, заполненный функциями. Как так:

var MyModule = { 
    prepareHtmlContent: function() { 
    }, 
    autoLoadActionInitiatorFunctions: function() { 
    } 
}; 

Причиной я предлагаю это, что вы называете свой объект как «MyModule». Если ваше намерение заключается в том, чтобы использовать его как «класс» и создавать экземпляры отдельных копий, когда они нужны, вы делаете это правильно.

2

быстро взломать что-то не уродливой

module.js

function MyModule() { 
    console.dir('constructor'); 
} 
module.exports = MyModule; 

app.js

Function.prototype.new = function() { 
    return new this(); 
}; 
var MyModule = require('./module.js').new(); // 'constructor' 
+0

+1 для умного решения, но он должен появиться с предупреждением о распространении собственных объектов –

1

Вот что я использую

(function(module) { 

    module.myFunction = function() { 

    } 

    module.createSomeObj = function() { 
     return { 
      foo: 1, 
      bar: 'bar' 
     };  
    } 

}(module.exports)); 

Использование

var myModule = require('./myModule'); 

myModule.myFunction(); 
var myObject = myModule.createSomeObj(); 
Смежные вопросы