5

如果我有一个带有公共成员的模块并且我像这样使用它

Module.Sub.member()

那么将成员静态导入本地范围的最佳(如果存在)方法是什么,例如using在 cpp 或import staticJava 中?

4

3 回答 3

13
var App = (function(app) {

    /* Dependencies */
    var Sound = app.Modules.Sound,        
        Input = app.Modules.IO.Input,
        ...

    /* Actual code using dependecies */
    ...    


})(App || {});

该解决方案有几个优点:

  • 声明在模块的顶部,第一眼就清晰可见(可维护的代码),

  • 导入的通常好处:更少的输入,避免命名空间冲突等(可维护的代码

  • 长属性路径查找(a.b.c.d)只需要一次(性能),

  • 使用局部变量更快,使用全局变量 - 更快的查找(性能),

  • 缩小工具可以安全地缩小局部变量名,但不能简单地缩小全局变量。

于 2013-02-21T09:25:25.330 回答
2

这是一种我觉得很漂亮的方法,可以指出:

(function(member) {
    //Your code here will see member in this scope.
}) (Module.Sub.member);

希望这可以帮助。

于 2013-02-21T08:17:40.517 回答
2

就像是

member = Module.Sub.member;

也许?但是要小心,因为它会使全局对象属性变得混乱,甚至可能最终覆盖其中的一些属性,因为您没有“编译单元”的概念,静态导入在 Java 中的作用域。相反,您的 VM 有一个单一的、动态的执行状态,因此上面的建议不是声明性的,而是实现您所追求的目标的必要方式。

据我所知,没有办法以声明的方式实现相同的目标import static

于 2013-02-21T08:10:23.710 回答