JavaScriptにおけるクロージャを利用したモジュールでのオブジェクトエクスポート
次のようなモジュールがあるとします:
;(function() {
function func1() {
alert('モジュールの関数');
}
function func2() {
alert('モジュールの関数');
}
function func3() {
alert('モジュールの関数');
}
})();
ここで、3つの関数すべてを外部にエクスポートしたいとします。この場合、モジュールの外部で余分な関数名を増やさないために、すべての関数を1つのオブジェクトに格納し、そのオブジェクトをエクスポートするのが良い方法です:
;(function() {
function func1() {
alert('モジュールの関数');
}
function func2() {
alert('モジュールの関数');
}
function func3() {
alert('モジュールの関数');
}
window.module = {func1: func1, func2: func2, func3: func3};
})();
キー名と変数名が一致しているので、関数を含むオブジェクトは以下のように簡略化できます:
;(function() {
function func1() {
alert('モジュールの関数');
}
function func2() {
alert('モジュールの関数');
}
function func3() {
alert('モジュールの関数');
}
window.module = {func1, func2, func3};
})();
別の方法もあります。関数を定義する際に、直接オブジェクトに関数を登録する方法です。以下のようになります:
;(function() {
let module = {};
module.func1 = function() {
alert('モジュールの関数');
}
module.func2 = function() {
alert('モジュールの関数');
}
module.func3 = function() {
alert('モジュールの関数');
}
window.module = module;
})();
次のモジュールがあるとします:
;(function() {
let str1 = 'モジュールの変数';
let str2 = 'モジュールの変数';
let str3 = 'モジュールの変数';
function func1() {
alert('モジュールの関数');
}
function func2() {
alert('モジュールの関数');
}
function func3() {
alert('モジュールの関数');
}
function func4() {
alert('モジュールの関数');
}
function func5() {
alert('モジュールの関数');
}
})();
最初の5つの関数と最初の2つの変数を含むオブジェクトを外部にエクスポートしてください。