如果你需要一個給定的模塊中創建多個對象,那麼你會在那裏你模塊句柄保存到一個局部變量中使用自己的方案,先這樣,你可以多次引用它:
const SomeConstructor = require('./src/mymodule');
const myObj1 = new SomeConstructor();
const myObj2 = new SomeConstructor();
如果您只需要在給定模塊內創建一個該類型的對象,並且該模塊中不需要該模塊的其他任何輸出,如您所示,您不需要將構造函數/模塊句柄存儲在其自己的模塊中首先變量,所以你可以直接使用它,因爲你已經顯示:
const myObj = new (require('./src/mymodule'))();
因爲這個語法看起來有些尷尬,所以導出的工廠函數會自動爲您應用new
。例如,http
模塊暴露了一個工廠函數來創建一個服務器:
const http = require('http');
const server = http.createServer(...);
在你的榜樣,你可以做的兩者之一:
// module constructor is a factory function for creating new objects
const myObj = require('./src/mymodule')();
// module exports a factory function for creating new objects
const myObj = require('./src/mymodule').createObj();
的一個例子Express服務器框架是這樣的:
const app = require('express')();
如果你想從Express模塊訪問其他出口:
const express = require('express');
const app = express();
app.use(express.static('public'));
在快遞例子中,出口雙雙工廠功能,是在工廠功能性等方法。您可以選擇僅使用工廠功能(上面的第一個示例),或者您可以保存工廠功能,以便還可以訪問其中的一些屬性(第二個示例)。
實際上'new require('./ src/mymodule')()'does * not * work。再次看看OP的用途。 – Bergi
@Bergi - 我糾正了我的例子。使用'new'優先規則是JS中的噩夢(大多數人不知道它們)。另一個原因是不使用OP提出的方案,而是在沒有這種混淆的情況下使用工廠功能。 – jfriend00
感謝您的詳細回覆!我剛剛閱讀了工廠解決方案。 (可能需要('./ src/mymodule'))(args); – Giallo