Javascript 如何从命名空间外部更新内部配置?
我有一个javascript文件,如下所示Javascript 如何从命名空间外部更新内部配置?,javascript,namespaces,private-methods,Javascript,Namespaces,Private Methods,我有一个javascript文件,如下所示 (function (rpc) { rpc.loadHomeBanner = rpc_loadHomeBanner; function rpc_loadHomeBanner(){ // AN is used by Sencha Animator as an Animation variable rpc.AN ={}; rpc.AN.Controller = {
(function (rpc) {
rpc.loadHomeBanner = rpc_loadHomeBanner;
function rpc_loadHomeBanner(){
// AN is used by Sencha Animator as an Animation variable
rpc.AN ={};
rpc.AN.Controller = {
setConfig: function(configData) {
// update config crap
}
};
var configData = {
// config crap
};
rpc.AN.Controller.setConfig(configData);
}
})(rpc);
现在,在第一次加载页面时,我调用
rpc.loadHomeBanner();
当我需要它时,它就会燃烧起来
问题是我有一个handleOrientionChange
方法需要从名称空间之外更新配置(由于开销,我不想触发loadHomeBanner方法)
如何从闭包范围之外调用
rpc.AN.controller.setConfig
?它应该已经可以访问,因为您已经将rpc
对象传递到该代码模块中。您应该创建一个工厂
var createRPC = function( rpc ) {
rpc.AN = {
Controller: {
setConfig: function( configData ) {
}
}
};
return {
updateConfig: function( configData ) {
rpc.AN.Controller.setConfig( configData );
};
};
};
然后像这样使用它
var rpc = createRPC({});
//handle orientation change
rpc.updateConfig({
some: 'data'
});
您正在从外部传递rpc
,因此您应该能够从rpc
可见的任何位置调用rpc.AN.controller.setConfig
。实际上,我看不出闭包有什么好处。@FelixKling:我希望这不是该模块中的全部代码,Chase只是展示了必要的东西?hrm。。。我觉得有点傻。我得到的错误正在setConfig
方法中抛出。在问愚蠢的问题之前,我应该多做一些疑难解答。注意他的另一个问题:对于对象形式,他使用的是上下文。
var rpc = createRPC({});
//handle orientation change
rpc.updateConfig({
some: 'data'
});