2016-09-11 5 views
1

node.js 4.5.0の名前空間内にクラスを作成しました。その実装は次のとおりです。名前空間に実装されたクラスをexportするにはnode.js

// 
// Contents of MyList.js 
// 
"use strict"; 

var MyCollections {}; 

(function() {  
    this.List = function() { 
    // 
    // Simple List implementation ... 
    // 
    } 
}).apply(MyCollections); 

MyCollections.Listクラスをインスタンス化するスクリプトでは、次のコードを記述しました。

// 
// Contents of CheckList.js 
// 
"using strict"; 

var collections = require('../MyList'); 

var list = new collections.List(); 

上記のスクリプトをノードで実行すると、次のようなメッセージが表示されます。上記MyList.jsでListクラスの実装を考えると

PS C:\work\node.js\MyCollections\List> node .\CheckList.js 
Number of Items in List: 2 
C:\work\node.js\MyCollections\List\CheckList.js:6 
var list = new collections.List(); 
     ^
TypeError: collections.List is not a function 
    at Object.<anonymous>  (C:\work\node.js\MyCollections\List\CheckList.js:6:12) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at startup (node.js:139:18) 
    at node.js:974:3 

は、私はListクラスをエクスポートするために何を変更する必要がありますので、私は複数のスクリプトでそれを再利用することができますか?

私がしていることを説明する際に間違った用語を使用している可能性があるので、これが以前に投稿され、回答されていれば謝ります。私の意図は、ネームスペースを宣言し、コレクションクラス(この場合は単純リスト)を実装する関数プロトタイプを公開し、ある程度カプセル化の を維持します。私は、同じスクリプトMyList.js内の整数のリストをインスタンス化して移植しようとすると、リストの関数が期待通りに機能するように、Listクラスの実装が正しいと思います。例えば;

// 
// Statements after (function() { //... }).apply(MyCollections); 
// 

var list = new MyCollections.List(); 

list.append(1); 
list.append(2); 
list.append(3); 
list.append(4); 

console.log("Number of Items in List: " + list.count()); 

while (list.hasNext()) { 
    var trace = 
    'Item ' + (list.position() + 1) + ' of ' + list.count() + ' = ' + 
    list.getItem(); 

    console.log(trace); 

    list.next(); 
} 

// 
// Output: 
// 
Number of Items in List: 4 
Item 1 of 4 = 1 
Item 2 of 4 = 2 
Item 3 of 4 = 3 
Item 4 of 4 = 4 

ご協力いただきありがとうございました。

答えて

1

MyCollectionsをエクスポートする必要があります。あなたのMyList.jsに以下を追加します。

module.exports = MyCollections; 

ので、更新されたファイルは以下の内容があります。

// 
// Contents of MyList.js 
// 
"use strict"; 

var MyCollections = {}; 

(function() {  
    this.List = function() { 
    // 
    // Simple List implementation ... 
    // 
    } 
}).apply(MyCollections); 

module.exports = MyCollections; 
+1

は、迅速な応答をありがとう。あなたの答えはスポット・オンです: "use strict"; var collections = require( './ List'); var list = new collections.List(); – ClockEndGooner

+0

@ClockEndGooner(サムズアップ) –

関連する問題