2016-11-13 28 views
0

私は3つのスクリプトファイルを持っています。 main.js、script1.js、script2.js。異なるJSファイル間で同じスコープ変数を共有する方法

function IncludeJs(sFileName) { 
    document.writeln('<script type="text/javascript" src="' + sFileName + '"></script>'); 
} 

IncludeJs("../script1.js"); 
IncludeJs("../script2.js"); 

script1.jsとscript2.jsコード同じ名前空間の下にある:

main.jsはただドキュメントにスクリプトがあることがあります。

script1.js:関数func1が定義されていないので、関数func2が動作していない

var sharedNamespace = sharedNamespace || {}; 

(function() { 

    "use strict"; 

    function func2(){ 
     return func1(); 
    } 

}).apply(sharedNamespace); 

var sharedNamespace = sharedNamespace || {}; 

(function() { 

    "use strict"; 

    function func1(){ 
     .... 
    } 

}).apply(sharedNamespace); 

script2.js。私はscript1.jsとscript2.jsを共有変数で同じスコープで使うことができますか?

sharedNamespace.func1 = function(){}の解決策、私は自分のライブラリを使用するクライアントにこの機能を公開したくないので、私にとっては最悪です...

+1

要件があると不可能です。あなたは誰にもその機能を公開する必要があるか、または単一のスクリプトを持つ必要があります。非公開の機能と別のスクリプトとの共有機能を持つ方法はありません。 – vlaz

+0

[javascript - プロトタイプ定義の関数からプライベートメンバー変数にアクセスする]の可能な複製(http://stackoverflow.com/questions/436120/javascript-accessing-private-member-variables-from-prototype-defined-functions) – yuvi

答えて

5

...私はこれを公開したくありません私のライブラリを使用するクライアントに...

別々のスクリプトファイルを持ち、お互いを呼び出す関数を定義したい場合、選択肢はありません。 script1.jsscript2.jsは、ページ上の他のスクリプトからもアクセスできない共通スコープを共有することはできません。

代わりに、1つのスクリプトに(もちろん)個人情報がある可能性があるため、開発用に別々のファイルを組み合わせて展開することをお勧めします。 (プライベートでは、ユーザーはもちろん、スクリプトを編集する場合は除きます。)

だから、例えば、あなたはこのようなものかもしれません:

script1.js

var internal = internal || {}; 
(function(i) { 
    i.func1 = function func1() { 
     // ...code here, possibly using i.func2() 
    }; 
})(internal); 

script2.js

var internal = internal || {}; 
(function(i) { 
    i.func2 = function func2() { 
     // ...code here, possibly using i.func1() 
    }; 
})(internal); 

を開発を行うときは、それらを別々に含めるので、どのコードでもinternal.func1を使用できます。あなたのオールインワン・スクリプトのビルドを行うとき、あなたはそれが今

(function() { 
    // ...contents of script1.js here... 
    // ...contents of script2.js here... 
})(); 

を包ん必要があるだろう。しかし、その後、internalを組み合わせたスクリプトにプライベートです。

これは私の頭の上から外れています。おそらくそれほど面倒な方法はありません。

+0

!ありがとうT.J –

関連する問題