如何避免Javascript中的长命名空间

时间:2012-03-10 10:59:49

标签: javascript namespaces

我们正在开始一个新项目,我们决定使用javascript“”命名空间“”来组织我们的客户端代码。问题是我们已经注意到,我们可以很容易地结束那些难以记住的超长命名空间,如

  

myProject.components.myComponent.doSomethig();

有没有更好的方法来做到这一点或以某种方式创建某种“别名”?

感谢。

3 个答案:

答案 0 :(得分:3)

在JavaScript中,您可以对长命名空间的内容进行快捷方式引用

 var myComp = myProject.components.myComponent;
 myComp.func1();

这仅供参考。您可以使用其他长名称执行此操作,并且不要像这样写

 var getEl = document.getElementById, 
     myEl = getEl('divId');

您还可以使用RequireJS整理代码来整理代码

// file:myProject / components / myComponent.js

 define(function(){
       var myComponent ={};
       myComponent.func1 = function(){
           ...
       }
       return myComponent;
 });

// file:myProject / main.js

 require(['myProject/components/myComponent',  'myProject/components/myComponent2'], 
 function(comp1, comp2){
         var main = {};
         main.init = function() {
             ...
             comp1.func1();
         }
 });

// file:myProject / index.html

 <script src="libs/require.js" data-main="myProject/main"></script>

答案 1 :(得分:1)

如果你在模块代码周围使用作用域函数(如果不这样做,你应该),那么你可以很容易地创建局部别名作为给定模块中所有函数共享的变量。

,例如,定义myComponent组件的代码:

(function() {
    var comp = {};

    // Export our component
    myProject.components.myComponent = comp;

    // add things to `comp`; since `comp` and `myProject.components.myComponent`
    // refer to the same object, adding to `comp` is adding to the one object
    // they both refer to and so you can access those things via either reference
})();

同样,如果您正在编写使用多个组件的应用代码:

(function() {
    var thisComp = myProject.components.thisComponent,
        thatComp = myProject.components.thatComponent;

    // Use `thisComp` and `thatComp`
})();

答案 2 :(得分:0)

您始终可以在子变量中存储子名称空间:

var myComponent = myProject.components.myComponent;