以前、JavaScript のモジュール化でデータが隠蔽されるという問題に遭遇しました。以下のリンクを参照してください。
モジュールパターン - 1 つのモジュールのコードを異なる js ファイルに分割する方法は?
問題を説明するには、次の例を参照してください。私の目標は、長い js ファイルを 2 つのファイルに分割することですが、一部の関数はいくつかのプライベート変数にアクセスする必要があります。
first.js:
(function(context) {
var parentPrivate = 'parentPrivate';
})(window.myGlobalNamespace);
second.js:
(function(context) {
this.childFunction = console.log('trying to access parent private field: ' + parentPriavte);
}(window.myGlobalNamespace.subNamspace);
子は親にアクセスできないため、これは機能しません。解決策の 1 つはparentPrivate
公開することですが、私の場合は受け入れられません。
以前の質問の1つに答えた@Louisを引用:
「子供はアクセスできるが、外部のパブリックにはアクセスできない (つまり、保護された) フィールドを持つことはできません。それを達成する方法はありますか?」
モジュール化が必要な場合 (つまり、子を親とは別にコーディングしたい場合)、JavaScript でこれが可能であるとは思えません。子と親を同じクロージャで動作させることは可能ですが、これはモジュール化されません。これは、RequireJS の有無にかかわらず当てはまります。
問題は、親と子が同じクロージャー内にないことです。したがって、ファイルを同じクロージャーに入れるライブラリを作成することは理にかなっていると思いますか?
何かのようなもの:
concatenator.putIntoOneClosure(["public/js/first.js", "public/js/second.js"]);
もちろん、名前空間などを指定するために、より多くの引数を受け取ることができます。これは、RequireJS から得られる機能と同じではないことに注意してください。RequireJS はモジュール化を実現しますが、この連結子はモジュール化の条件下でのデータの隠蔽に焦点を当てています。
では、上記のいずれかが理にかなっていますか? それとも、いくつかの重要なポイントを見逃していますか? どんな考えでも大歓迎です。