在JavaScript中创建命名空间

时间:2014-06-22 19:43:53

标签: javascript namespaces

我是JavaScript的新手。我有很多实用函数我多年来在C#中写过。我想将其中一些迁移到JavaScript。当我在代码中使用它们时,作为开发人员,我想进行以下调用:

myCompany.myLibrary.functionName(param1, param2, etc);

我的问题是,如何在JavaScript中设置它?例如,在这个时候,我有:

var functionName = function() {
  // do stuff
};

但是,我不确定如何将“范围”纳入myCompany.myLibrary。这种事情是否可行。我觉得是这样的。我的基础是像lodash这样的库。但是,由于我不熟悉JavaScript,我的解释可能不正确。

感谢您提供任何帮助。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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';

答案 2 :(得分:0)

我喜欢你拥有"名称空间"获取字符串的函数" myCompany.myLibrary"在你的情况下,创建该对象结构(如果它不存在)并返回对该对象的引用:

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

您可以在此处找到如何编写命名空间函数的示例:http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/

答案 3 :(得分:0)

另一种方法是如何组织JavaScript库(同时拥有自己的命名空间)。

var myCompany = myCompany || {};

myCompany.myLibrary = (function() {

    var myPrivateProperty = "I'm a private property.";
    var myPrivateMethod = function () {
    // I'm a private method
    }

    return {
        myPublicProperty: "I'm a public property.",
        myPublicMethod1: function () {
        // I'm a public method
        },
        myPublicMethod2: function (arg1, arg2) {
            // I'm a public method, capable to return/call private property or method 
            return myPrivateProperty; 
        }
    };
})();

用法:

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