JavaScript中的命名空间技术,推荐? 高性能? 需要注意的问题?

在我正在开发的一个项目中,我正在构建我的代码,如下所示

MyLib = {
    AField:0,

    ASubNamespace:{
        AnotherField:"value",

        AClass:function(param) {
            this.classField = param;

            this.classFunction = function(){
                // stuff
            }
        }
    },

    AnotherClass:function(param) {
        this.classField = param;

        this.classFunction = function(){
            // stuff
        }
    }
}

像这样做,像这样的东西:

var anInstance = new MyLib.ASubNamespace.AClass("A parameter.");

这是实现名称空间的正确途径吗? 是否有性能点击,如果是的话,有多激烈? 当我嵌套更深时,性能下降是否会叠加? 使用这种结构时,我应该注意哪些其他问题?

我关心每一点表现,因为它是一个实时图形库,所以我非常重视任何开销。


当您将代码构建为巨大的对象属性层次结构时,您有时会MyNamespaceObj.prop1尚不可用于MyNamespaceObj.prop2 。 然后有一个事实是,你通常最终会在代码中输入完全限定的名字。

我开始发现我更喜欢做这样的事情:

MyNamespaceObj = (function () {

    // lots of code/definitions that have local scope
    var internallyDefinedItem1 = function (n) { /* ... */ }
    var internallyDefinedItem2 = {
        foo: internallyDefinedItem1(532),
        bar: totallyPrivateNeverExportedFunction(17)
    }
    var totallyPrivateNeverExportedVar = 'blahblahblah';
    function totallyPrivateNeverExportedFunction (x) {
       /* ... */
    }

    return {
        exportedItem1: internallyDefinedItem1,
        exportedItem2: internallyDefinedItem2,
        ...
    }
})();

我建议命名空间是编写可维护JavaScript的关键部分 - 特别是如果你与一个开发团队合作。

如果在生产过程中压缩/最小化代码,与命名空间相关的性能问题应该很小。

这里是讨论使用命名空间的替代方法。


命名空间对于避免潜在的冲突和覆盖是至关重要的。 当你的JS会在外部JS也可以驻留的外部环境中登陆时,情况就是如此。

这就是说,由于命名空间的原因,性能会受到影响,因为解释器现在必须遵循更长的链才能访问所需的函数/属性。

例如,类似的东西

  var myProperty;

访问速度要快一些:

 myNameSpace.module1.myProperty;

我认为速度的差别并不大,除非你的命名空间非常深,避免潜在冲突的好处是命名空间的一大优点。

但是,仍然需要牢记这个问题。

链接地址: http://www.djcxy.com/p/2791.html

上一篇: Namespacing technique in JavaScript, recommended? performant? issues to be aware of?

下一篇: Define global variable in a JavaScript function