javascript私有变量访问问题
这是为javascript大师准备的: 我正在试验一个新的javascript框架。它的结构灵感来自强大的jQuery 它有一个名为javascript私有变量访问问题,javascript,plugins,frameworks,closures,Javascript,Plugins,Frameworks,Closures,这是为javascript大师准备的: 我正在试验一个新的javascript框架。它的结构灵感来自强大的jQuery 它有一个名为$j的全局变量,以及。。哦,看看它在起作用: /* file: jfoo.js */ $j = new (function(){ var modules=[]; this.loadModule = function(mod) { modules[ modules.length ] = mod; } this.hasMo
$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];
}
})();
及
但我没有得到更好的结果
因此,问题是:
- 是否有任何方法可以将
方法写入一个单独的文件中,并且仍然让它访问私有方法loadBatch
?(我希望答案是响亮的“不”,但谁知道呢?)模块
- 有没有其他方法可以在不公开
模块的情况下达到预期效果?(如果我公开,我知道如何进行)
- jQuery是否使用私有成员?那么,它是如何克服其“私人可访问性”问题的呢
jrhAFAIK无法将访问“私有”变量(仅在闭包范围内的变量)的权限授予其范围外的某些执行上下文,但不能授予其他执行上下文。(例如,您可以编写访问器方法,但不能限制谁可以访问)知道jQuery是如何实现的吗?jQuery真的做到了吗?jQuery使用构建步骤将所有文件粘合在一起,然后再发送到客户端。
/* file:loadBatch.jfoo.js */
!$j || (function(){
$j.extend( {
loadBatch : function(batch) {
for(ind in batch)
modules[ modules.length++ ] = batch[ind];
}
});
})();