如何不暴露类声明(将它们隐藏在全局命名空间中)?

时间:2012-10-15 18:11:59

标签: javascript

美好的一天。 我面临着一个相当简单的麻烦。我希望社区能帮助我。

这就是我所拥有的: 我有两个JavaScript文件:第一个是Parent类,第二个是Child类。 现在我想从全局命名空间隐藏这些定义。当然,我可以将它们全部放入单个JavaScript文件中并将其包装到这样的自调用匿名函数中,这样只有一个子对象的实例(我想要实现的目的):     

var myChildObj = (function(){

    var ParentClass = function() {};    
    ParentClass.prototype = { 
        //some data
    };

    function extendsClass(childClass, parentClass, isRewrite) {
        for(var property in parentClass.prototype) {
            if (isRewrite || 
               (!isRewrite && 
                !isDefined(childClass.prototype[property]))) {                         
                childClass.prototype[property] = parentClass.prototype[property];
            }
        }

        childClass.prototype.parent =  parentClass.prototype;
    }

    var ChildClass = function() {}; 
    ChildClass.prototype = {
        //some data
    }

    extendsClass(ChildClass, ParentClass, false);
    return new PhotoGallerySingle();    
})();

但是ParentClass声明相当庞大,并且程序员不会把它全部放在那里。

那么,你通常如何解决这个问题呢?谢谢。

2 个答案:

答案 0 :(得分:1)

唯一的选择是将它附加到窗口对象,说明你可以将它嵌套在同一个变量下:

var MYNAMESPACE = window.MYNAMESPACE = {}
MYNAMESPACE.code = "hello"

请确保您没有点击正在使用的名称(如文档或类似名称)

答案 1 :(得分:1)

我担心你不能这样做。

您可以随时将其附加到除直接全局命名空间之外的其他对象,但如果您希望能够在第二个脚本中使用它,则需要在某处将其公开。最终,它需要可以从全局对象访问。

对不起。