2013-12-10 59 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(); 
相關問題