これはjavascriptの達人のためのものです。JavaScriptのプライベート変数へのアクセスの問題
私は新しいJavaScriptフレームワークを試しています。その構造は、偉大なjQuery以外には触発されていません。
それは$j
と呼ばれるグローバル変数を持ち、そして...ああ、ただのアクションでそれを参照してください。
/* file: jfoo.js */
$j = new (function(){
var modules=[];
this.loadModule = function(mod) {
modules[ modules.length ] = mod;
}
this.hasModule = function(mod) {
for(ind in modules)
if(modules[ind]==mod) return true;
return false;
}
})();
あなたはモジュールはプライベート変数であることがわかります。問題ない;それは私が意図したものです。
今、自分のシステムに$j.loadBatch
メソッドを追加するプラグインを書きたいと思います。 ..だから
/* file: loadBatch.jfoo.js */
!$j || (function(){
$j.loadBatch = function(batch) {
for(ind in batch)
modules[ modules.length++ ] = batch[ind];
}
})();
しかし、この方法は、ファイルjfoo.js
で閉鎖の一部ではないので、これは不可能です。
私はまた、このバージョン試してみました:
/* file: jfoo.js */
$j = new (function(){
var modules=[];
this.loadModule = function(mod) {
modules[ modules.length ] = mod;
}
this.hasModule = function(mod) {
for(ind in modules)
if(modules[ind]==mod) return true;
return false;
}
this.extend = function(extensions) {
for(ext in extensions)
this[ext] = extensions[ext];
}
})();
と
/* file:loadBatch.jfoo.js */
!$j || (function(){
$j.extend({
loadBatch : function(batch) {
for(ind in batch)
modules[ modules.length++ ] = batch[ind];
}
});
})();
をしかし、私はより良い結果を得ませんでした。
ので、質問:
- 私は別のファイルに
loadBatch
方法を書いて、まだそれはプライベートメソッドmodules
にアクセスすることができます方法はありますか? (私は答えが響きたくないと思っていますが、誰が知っていますか?) modules
を公開せずに希望の効果を達成できる方法はありますか? (私が公開すると進める方法を知っています)- jQueryはプライベートメンバーを使用しますか?それはどうやって「プライベート・アクセシビリティ」の問題を乗り越えますか?
おかげで、
JRH
jQueryはどのようにしていますか? jQueryは実際にそれを行いますか? – jrharshath
jQueryは、ビルドステップを使用して、クライアントに送信する前にすべてのファイルを1つにまとめます。 –