2012-03-10 38 views
1

我们正在开始一个新项目,并且我们决定使用javascript“”名称空间“来组织我们的客户端代码。事情是,我们已经注意到,我们可以非常容易地结束使用难以记忆的超长命名空间,如如何避免Javascript中的长命名空间

myProject.components.myComponent.doSomethig();

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

谢谢。

回答

3

在JavaScript中,你可以做长期的命名空间的快捷方式引用东西

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

这只是参考。您可以与其他长名称做到这一点,少写这样

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

你也可以用RequireJS组织代码的组织代码

//文件:myProject的/组件/ myComponent.js

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

//文件:myProject的/ main.js

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

//文件:myPro ject/index.html

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

您可以将子名字空间总是存储在一个局部变量:

var myComponent = myProject.components.myComponent; 
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` 
})(); 
+0

这可能是最通用的解决方案,(只是为了评论为什么“应该”是有意义的)。如果窗口对象被重新定义,那么范围函数可以防止在代码后面可能导致灾难的名称空间冲突。 – Shane 2012-03-10 12:35:39

相关问题