2

Marionette 允许您将模块的定义拆分到单独的文件中。

是否可以从模块的第二部分访问在模块的一部分中定义的私有变量或函数?例如:

//in module1.js
App.module("MyModule", function(MyModule, App, Backbone...){
    myPrivateVar = 0;
}

//in module2.js
App.module("MyModule", function(MyModule, App, Backbone...){
    var myPrivateFunction = function(){
        if (myPrivateVar>0){
            //do something
        }
    }
}
4

1 回答 1

5

你不能。这绝不是木偶特有的。

javascript中的变量是函数范围的。换句话说,在函数内声明的任何变量都只能在该函数内使用。

定义假私有变量(实际上是公共的)的一个常见约定是在名称前加上下划线:

//in module1.js
App.module("MyModule", function(MyModule, App, Backbone...){
    MyModule._myPrivateVar = 0;
});

//in module2.js
App.module("MyModule", function(MyModule, App, Backbone...){
    var myPrivateVar = MyModule._myPrivateVar;
    var myPrivateFunction = function(){
        if (myPrivateVar>0){
            //do something
        }
    }
});

_不从模块外部访问 -prefixed 变量的勤奋取决于您。您还应该注意模块的加载顺序:为了_myPrivateVar被定义,module1.js 需要在 module2.js 之前加载。

于 2013-02-19T09:34:35.517 回答