2017-11-03 19 views
0

私は、ファイルにそうように関数を宣言しています:私は、ファイル1をインポートし、file1.function1機能の実行を呼び出すと、私は結果を取得する場合、別のファイルでnodejs関数宣言

File1: 
    module.exports = { 
     function1: function(callback){ 
      //do some work 
     }, 
    } 

私はFile1の中だと、別の関数宣言した場合、けれども:私は定義されていない関数1を取得しています。この場合

module.exports = { 
    function1: function(callback){ 
      //do some work 
    }, 
    function2: function(callback){ 
     var result = function1... 
    } 
} 

を。

どうしてですか?それは呼び出しが行われている場所から独立したどこかで呼び出されるべきではありませんか?

+1

これらは関数式ではなく、関数の宣言です。 – Quentin

+0

エラーを生成する正確なコード、エクスポートとインポートの両方を表示してください。 – Bergi

答えて

4

問題は、誤ったスコープからfunction1にアクセスしようとしていることです。スコープに定義された "function1"変数はありません。さらにいくつかの例:あなただけmodule.exports.function1

const exportObject = { 
    function1: function(callback){ 
      //do some work 
    }, 
    function2: function(callback){ 
     var result = exportObject.function1... // or this.function1 
    } 
} 

module.exports = exportObject; 

UPDATE動作するはずですしている

function1() { 
    // this will be executed by example2 
} 

var example3 = { 
    function1: function() { 
     // this will be executed by example3 
    } 
} 
const exportObject = { 
    function1: function(callback){ 
     // This will be executed by example1 
    }, 
    function2: function(callback){ 
     // example1 
     var result = exportObject.function1() // or this.function1() 
     // example2 
     var result = function1() 
     // example3 
     var result = example3.function1() 
    } 
} 

module.exports = exportObject; 
+0

これは好きです。それがなぜこれのような理由についての詳細は?私はこの答えを受け入れるでしょう – JoaoFilipeClementeMartins

+0

主な問題は意味論です。@ user1695032が述べているように、 'function1'は' function2'のスコープでは見えません。このコードブロックは、あなたのためにもっとうまくいく方法で書き直すことができます。 –

+0

私は答えを更新しました...もしあなたがexample nr 3を見れば...あなたのコードを動作させるために本質的に必要だったことです。違いは、それは同じ親オブジェクトの一部であるということです。 – user1695032

3

function1は変数ではありません。

module.exportsに割り当てたオブジェクトのプロパティです。

はこれに比較してください。

var foo = { 
 
    bar: 1 
 
} 
 

 
console.log(bar);

barfooの財産ではなく、独自の権利で変数です。

あなたはそのように扱わなければなりません。

var foo = { 
 
    bar: 1 
 
} 
 

 
console.log(foo.bar);

同じことがfunction1の真実です。

あなたは、オブジェクトのプロパティとしてアクセスする必要があります。

var result = module.exports.function1(); 
0

[ファイル1での機能module.exports.function1を作成する場合は、ファイル1でそれにアクセスする方法はmodule.exports.function1を言っています。それは少し長く巻き込まれています。また、あなたはファイル1で、このようにそれを作成することができます:

var function1 = function() {...}; 
module.exports.function1 = function1; 

function1(); 

をあなたはファイル2にfunction1を使い続けることができます。

var file1 = require('./file1'); 
file1.function1();