2017-01-14 7 views
0

私は公共の変数に関数を割り当て、そのモジュール内の関数を使用するモジュールを用意しています。私ができると思ったことは、以下の例を参照してください。モジュール間で関数を割り当てます

main.js

;(function() { 
    const test = require("./test"); 

    function newFunction() { 
     console.log("New function"); 
    } 

    // This works fine 
    test.someFunction = newFunction; 
    test.someFunction(); 

    // But this doesn't 
    test.callSomeFunction(); 
}()); 

test.js

;(function() { 
    let someFunction = function() { 
     console.log("Old function"); 
    } 

    function callSomeFunction() { 
     someFunction(); 
    } 

    module.exports = { 
     someFunction, 
     callSomeFunction 
    } 
}()); 

はこの作品を作るために、私は現在のモジュール内の関数を設定する方法を持っているので、test.jsが見えます下のスニペットのように。

test.js

;(function() { 
    let someFunction = function() { 
     console.log("Old function"); 
    } 

    function callSomeFunction() { 
     someFunction(); 
    } 

    function setSomeFunction(newFunction) { 
     someFunction = newFunction; 
    } 

    module.exports = { 
     setSomeFunction, 
     callSomeFunction 
    } 
}()); 

私は、これは非常にエレガントなソリューションであることを感じていないので、最初の2つのスニペットが動作するように取得するかもしれないいくつかの方法の代替があった場合、私は思っていましたもし私がセッターメソッドに悩まされているのであれば、

答えて

0
function callSomeFunction() { 
    someFunction(); 
} 

callSomeFunction早い時期に(hoistingとして知られている)someFunctionより定義されます。

次の定義のために、結果として得られる:

1. callSomeFunction 
2. someFunction 

あなたはsomeFunctionで行ったようconstまたはletによって格納されるように、この機能を変更したり、function、それらの両方を持っていなければならないのいずれか。

+0

私が何かが欠けていない限り、あなたの解決策は残念ながらうまくいきません。 'let'または' function'のどちらかで両方の関数を定義しても、古い関数が呼び出されるのと同じ動作が起こります。 – tobloef

関連する問題