这个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
? (我希望答案是一个响亮的NO,但是,谁知道呢?)modules
的情况下实现所需的效果? (如果我公之于众,我知道该怎么办)谢谢,
JRH
答案 0 :(得分:3)
AFAIK无法在其范围之外的某些执行上下文中访问“私有”变量(仅在闭包范围内的变量),而不能访问其他变量。 (例如,您可以编写一个访问者方法,但无法限制谁可以访问)