私は学習目的でさまざまなJavaScriptライブラリを調べていました。基本的に、名前空間を初期化する最良の方法を見つけて、プロがライブラリ内の関連するすべてのファイルをどのようにロードするかを確認したいと思います。これは、ライブラリユーザーがいくつかのライブラリで呼び出すメインファイル(たとえば、myNameSpace.jsと呼びます)で数回遭遇しました。
(function() {
var jsFiles = window.MyNameSpace;
window.MyNameSpace = {
_getScriptLocation: (function() {
/* some code here */
})
};
if(!jsFiles) {
jsFiles = [/* An array of ALL the library files! */];
}
for(var i=0, len = jsFiles.length; i<len; i++) {
scriptTags[i] = "<script src='" + jsFiles[i] + "'></script>";
}
if(scriptTags.length > 0) {
document.write(scriptTags.join(""));
}
})();
したがって、この設定では、ライブラリユーザーがライブラリの特定の部分のみを含める場合は、myNameSpace.jsをロードする前に、次の行に沿って何かを実行して指定します。
<script type='text/javascript'> window.MyNameSpace = ["libraryFile1.js", "libraryFile2.js", "libraryFile3.js"]</script>
<script type='text/javascript' src="MyNameSpace.js"></script>
私の質問は、window.MyNameSpaceはオブジェクトであり、スクリプトがjsFilesをwindow.MyNameSpaceとして配列設定に割り当てる場合、これは参照による割り当てになりますよね?しかし、その行の直後に、window.MyNameSpaceが完全に変更されます。では、jsFilesは渡された元の配列を参照しないようにする必要がありますか?私の理解では、ここで何が欠けていますか?