2013-12-10 31 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(); 
相关问题