首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript命名空间

JavaScript命名空间
EN

Stack Overflow用户
提问于 2010-08-05 00:49:31
回答 11查看 6.1K关注 0票数 15

我想为我的应用程序创建一个全局命名空间,在这个名称空间中,我想要其他名称空间:

例如。

代码语言:javascript
复制
Dashboard.Ajax.Post()

Dashboard.RetrieveContent.RefreshSalespersonPerformanceContent();

我还想把它们放在单独的文件中:

  • Ajax.js
  • RetrieveContent.js

然而,我尝试过使用方法,但是它不能工作,因为在两个不同的地方,名称空间都使用相同的变量名。有人能提供一个替代方案吗?

谢谢。

EN

回答 11

Stack Overflow用户

发布于 2010-08-05 04:39:14

如果名称空间对象已经创建,您只需要确保它不会被踩到。像这样的东西会有用的:

代码语言:javascript
复制
(function() {
    // private vars can go in here


    Dashboard = Dashboard || {};
    Dashboard.Ajax = {
        Post: function() {
            ...
        }
    };
})();

RetrieveContent文件的定义也是类似的。

票数 9
EN

Stack Overflow用户

发布于 2011-06-16 23:19:04

这里是JavaScript中关于各种“模块模式”的一篇很好的文章。关于如何增强模块或名称空间,以及如何维护跨文件私有状态,有一个很好的小部分。也就是说,单独文件中的代码将在执行后按顺序执行,并适当地扩展命名空间。

我还没有彻底研究过这种技术所以没有承诺..。但这是基本的想法。

dashboard.js

代码语言:javascript
复制
(function(window){

    var dashboard  = (function () { 
        var my = {}, 
            privateVariable = 1; 

        function privateMethod() { 
            // ... 
        } 

        my.moduleProperty = 1; 
        my.moduleMethod = function () { 
            // ... 
        }; 

        return my; 
    }());

    window.Dashboard = dashboard;
})(window);

dashboard.ajax.js

代码语言:javascript
复制
var dashboard = (function (my) { 
    var _private = my._private = my._private || {}, 
        _seal = my._seal = my._seal || function () { 
            delete my._private; 
            delete my._seal; 
            delete my._unseal; 
        }, 
        _unseal = my._unseal = my._unseal || function () { 
            my._private = _private; 
            my._seal = _seal; 
            my._unseal = _unseal; 
        }; 

    // permanent access to _private, _seal, and _unseal

    my.ajax = function(){ 
        // ...
    }

    return my; 
}(dashboard || {}));

dashboard.retrieveContent.js

代码语言:javascript
复制
var dashboard = (function (my) { 
    var _private = my._private = my._private || {}, 
        _seal = my._seal = my._seal || function () { 
            delete my._private; 
            delete my._seal; 
            delete my._unseal; 
        }, 
        _unseal = my._unseal = my._unseal || function () { 
            my._private = _private; 
            my._seal = _seal; 
            my._unseal = _unseal; 
        }; 

    // permanent access to _private, _seal, and _unseal

    my.retrieveContent = function(){ 
        // ...
    }

    return my; 
}(dashboard || {}));
票数 7
EN

Stack Overflow用户

发布于 2010-08-05 03:52:13

雅虎命名空间函数正是针对这个问题设计的。

添加:

函数的来源是可用的。您可以将其复制到您自己的代码中,如果需要,可以将根从YAHOO更改为其他内容,等等。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3410984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档