在JavaScript中创建名称空间

在JavaScript中创建名称空间,javascript,namespaces,Javascript,Namespaces,我对JavaScript有点陌生。多年来我用C#写了很多实用函数。我想将其中一些迁移到JavaScript。当我在代码中使用它们时,作为一名开发人员,我想打以下电话: myCompany.myLibrary.functionName(param1, param2, etc); 我的问题是,如何在JavaScript中设置它?例如,目前,我有: var functionName = function() { // do stuff }; 然而,我不确定如何将其“范围”到myCompany.

我对JavaScript有点陌生。多年来我用C#写了很多实用函数。我想将其中一些迁移到JavaScript。当我在代码中使用它们时,作为一名开发人员,我想打以下电话:

myCompany.myLibrary.functionName(param1, param2, etc);
我的问题是,如何在JavaScript中设置它?例如,目前,我有:

var functionName = function() {
  // do stuff
};
然而,我不确定如何将其“范围”到myCompany.myLibrary中。这类事情可能发生吗。我想是的。我是基于像lodash这样的图书馆。然而,由于我对JavaScript有点陌生,我的解释可能不正确

谢谢你能提供的任何帮助

var myCompany = {
    myLibrary1: {
        func1: function (param1, param2, etc) {...},
        func2: function (param1, etc) {...},
        prop1: 7,
        prop2: 'xyz'
    },
    myLibrary2: {
        func1: function () {...},
        prop1: 123.0004
    }
};
然后你可以:

myCompany.myLibrary1.func1(1, 2, 3);
myCompany.myLibrary2.prop1 = 'hello world';

我喜欢这样一种方法,即使用一个“namespace”函数,在您的案例中使用字符串“myCompany.myLibrary”,并创建该对象结构(如果不存在)并返回对该对象的引用:

namespace('myCompany.myLibrary').functionName = function(){}

您可以在这里找到如何编写名称空间函数的示例:

使用下面的代码,您可以从不同的文件扩展“名称空间”。我相信这就是所谓的模块模式

var myCompany;
(function (myCompany) {
    (function (myLibrary) {
        myLibrary.someFunction = function () {
        };
    })(myCompany.myLibrary || (myCompany.myLibrary = {}));
    var myLibrary = myCompany.myLibrary;
})(myCompany || (myCompany = {}));

这是组织JavaScript库的另一种方式(同时拥有自己的名称空间)

用法:

myCompany.myLibrary.myPublicProperty;    
myCompany.myLibrary.myPublicMethod1();
myCompany.myLibrary.myPublicMethod2(x,y);

没有名称空间,您需要的只是一个使用点符号访问的对象。看看这是否有助于查看AMD模块,而不是简单地为代码命名。还有更多的好处。
myCompany.myLibrary.myPublicProperty;    
myCompany.myLibrary.myPublicMethod1();
myCompany.myLibrary.myPublicMethod2(x,y);