2016-12-15 21 views
1

私はJavascriptのオブジェクト指向の機能を研究していますが、私は "モジュールパターン"を見ています。私は別のファイルから呼び出したい自己実行機能を持っていますが、エラーが発生しています。ここで別のファイルから自己実行関数を呼び出す方法

は、自己の実行モジュールです:

var basketModule = (function() { 
    var basket = []; 
    function doSomethingPrivate() { 
     //... 
    } 
    // Return an object exposed to the public 
    return { 
     // Add items to our basket 
     addItem: function(values) { 
      basket.push(values); 
     }, 
     // Get the count of items in the basket 
     getItemCount: function() { 
      return basket.length; 
     }, 
    }; 
})(); 

私は別のファイルからこれを使用しようとしているがRun.jsと呼ばれる:

var basketModule = require("./basketModule"); 

basketModule.addItem({ 
    item: "bread", 
    price: 0.5 
}); 
console.log(basketModule.getItemCount()); 

私はこのnode Run.jsを実行すると、私はエラーを取得します

basketModule.addItem is not a function.

このようにbasketModuleへの呼び出しを追加しようとしました:basketModule();の直後に必要ですが、結果は

TypeError: basketModule is not a function.

私は何が欠けていますか?

console.log(basketModule.getItemCount()); 
+1

コードをエクスポートする必要があります: 'module.exports = basketModule'。 https://nodejs.org/api/modules.html#modules_module_exports –

+0

あなたのコードでは、 'basketModule'は無名関数では定義できません。 – nmnsud

答えて

3

あなたは関数の後module.exports = basketModule;を追加し、必要に呼び出すことによって、それを使用することができます前に、クラスをエクスポートモジュールする必要があります。上記で

var basketModule = (function() { 

var basket = []; 
function doSomethingPrivate() { 
    //... 
} 

// Return an object exposed to the public 
return { 

    // Add items to our basket 
    addItem: function(values) { 
     basket.push(values); 
    }, 

    // Get the count of items in the basket 
    getItemCount: function() { 
     return basket.length; 
    }, 


}; 
})(); 


module.exports = basketModule; 
あなたの他のファイルでも

var basketModule = require("./src/basketModule.js"); 

basketModule.addItem({ 
    item: "bread", 
    price: 0.5 
}); 

console.log(basketModule.getItemCount()); 

私たちのbasketModuleの新しいインスタンスを作成し、それに.addItem()を求めています。

+0

'module.exports = basketModule'を追加するとエラーはなくなりましたが、' new basketModule'を使うと 'basketModuleは関数ではありません 'という結果になります。あなたは私の質問に答えたので、私は答えを受け入れるだろうが、私は新しいエラーが起こっている理由を知りたい。 – Eddy

+0

最後に '.js'をインクルードする必要があるかもしれません。すぐにあなたの例とテストを再考しよう! –

+0

@エディー私は完全に私の答えでここで編集して自分自身を推測した、私はそれを更新しますが、テストで動作します。 –

関連する問題