仅实例化一次javascript模块

时间:2010-05-29 23:42:48

标签: javascript design-patterns module

我遵循我实例化组件的模块模式,但是,很多时候组件只会实例化一次(例如:文章的评论系统)。

现在我在同一个JS文件中实例化。但我想知道这是不是错误的做法?在同一个文件中实例化并且总是只有一次是没有意义的。但与此同时,如果这个文件在页面中,我想要访问我的模块,而不需要从其他地方实例化,如果我需要另一个实例,我只是从别处创建另一个...

以下是我遵循的模式:

  ApplicationNamespace.Classname = function() {
      // constructor    
      function privateFunctionInit() {
          // private
      }
      this.privilegedFunction = function() {
          // privileged
          privateFunction();
      };
   privateFunctionInit()
  };
  ApplicationNamespace.Classname.prototype = {
      Method: function(){}
  }
  var class = new ApplicationNamespace.Classname();

你觉得什么,错误的方法,还是这个好?

1 个答案:

答案 0 :(得分:2)

我认为这没有任何内在错误。在我的工作中,我们在代码库中有很多使用这种模式的JS类。尽管你基本上将这个类用作单例,但是如果你需要的话,以这种方式构造它可以让你在将来轻松创建更多的实例。

在我自己的项目中,我倾向于不在定义它们的文件中实例化JS类。我有一个单独的脚本,它将实例化页面上所需的任何类,并相应地使用它们。这种方法可能更模块化,但如果你只使用一个实例,那么这主要是一个偏好问题。

如果您确定永远不会使用该类的多个实例,则可以通过使用对象文字表示法创建单例对象来简化操作。