次の構造のスクリプトがあります。
Test = {
CONSTANTS : {},
VARIABLES : {},
MARKUP : {},
FUNCTIONS : {
init : function () {
// Access variable from different namespace
var all_constants = DifferentNamespace.CONSTANTS; // WORKS
var tester = DifferentNamespace.CONSTANTS.chunk_of_markup; // SAYS UNDEFINED
}
},
init : function () {
// Call real init() function
$(document).ready(function () {
Test.FUNCTIONS.init();
});
}
};
$(document).ready(function () {
Test.init();
});
関数呼び出しのいずれかを削除すると$(document).ready(..)
、別の名前空間から定数にアクセスしようとすると、未定義になります。両方ともうまく機能します。
ご覧のとおり、2 つのinit()
関数を使用しています。1 つは、関数を追加のオブジェクト内にラップしているため、init の呼び出しを整理するためだけのものです。
CONSTANTS、VARIABLES などと同じレベルにある関数を削除し、init()
Test.FUNCTIONS 内で呼び出そうとしても、まだ機能しません。
編集:
私console.log(all_constants)
が完全なオブジェクトを(.chunk_of_markupで)取得した場合、しかし私console.log(tester)
が getの場合undefined
. テスターをラップすると、[]
また、別の名前空間が別のファイルからマークアップを取得することにも注意してください。
理由はありますか?