1
這一個爲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 2009-06-25 14:17:26