只需访问其他命名空间的成员

时间:2010-03-01 12:24:24

标签: javascript namespaces scope

我使用着名的模块模式来创建命名空间,但是编写ns1.ns2.member来访问ns3(ns1.ns2.ns3)中的成员很麻烦。 我不喜欢使用快捷方式var(_ns2 = ns1.ns2)来实现此目的 with 语句被认为有害,所以处理这个问题有什么好处? 是否可以组合命名空间的范围或其他什么?感谢。

var NS1 = (function ()
{
    function $(id)
    {
        return document.getElementById(id);
    }    

    return {
        $: $
    }
})();


NS1.NS2 = function()
{
    function someFunc()
    {
        // Do not want the below one.
        NS1.$('...');
        // Is there a way to access $ directly.
        // without defining a variable for it here or using with statement.
    }
}();

1 个答案:

答案 0 :(得分:0)

我真的不知道你在说什么,即使我相信我也不知道“ns1.ns2.ns3”有什么不好,但这里有几个想法:< / p>

(function(tempNamespace) {
  blahBlah(tempNamespace.something, tempNamespace.somethingElse);
  // ...
})(ns1.ns2.ns3);

或者结合几个:

var nsCombined = $.extend({}, ns1, ns2, ns3); // jQuery

您正在使用这些命名空间进行的一些描述以及我们正在谈论的代码量将是有用的。我发现,一旦你开始使用类似jQuery的东西,对于大多数页面 - 即使是相当复杂的客户端行为 - 对大型长期数据结构的需求也会逐渐减少。