放弃javascript命名空间并显示模块模式以支持intellisense

时间:2012-09-05 17:32:22

标签: javascript visual-studio-2010 design-patterns

在过去几天沮丧地试图将我的代码折射成最佳设计模式,即揭示模块模式,或者甚至只是为简单的命名空间解决之后,我已经得出结论,对我来说,破坏视觉工作室智能感知支持的优点超越了优雅的设计模式。

因此,我采用以下解决方案:

以下列方式声明模块:

var namespaceprefix_someModule = new function(){

  function privatemethod(){}

  this.publicmethod = function(){};

}

我愿意付出5个全局变量的代价。 作为回报,代码可以整齐地划分为不同文件的功能模块, 并具有强大的智力支持。

我想知道是否有人在此提出替代解决方案。

2 个答案:

答案 0 :(得分:2)

对于this reason,您不应该对new运算符使用该模式。相反,使用

var namespaceprefix_someModule = (function(){

    function privatemethod(){}

    return {
        publicmethod: function(){}
    };
})();

我不确定,但我认为VS会认出这种模式。

答案 1 :(得分:1)

我最终决定设计代码,以便在转向生产时可以轻松地用.(点)替换下划线。这样我就可以使用完整的IntelliSense进行开发,最后只有一个全局变量。

在开发过程中,模块如下所示:

namespace_module1 = (function(){

   function private(){};

   function public(){};

   return {
     public: public
   }

})();

主模块通过将一个模块中的事件与另一个模块的公共函数相关联来充当中介角色。它看起来像:

var namespace = (function(){

   var module1 = namespace_module1;
   var module2 = namespace_module2;

   module1.on('someevent', module2.publicfunction);

})();