它是什么类型的Javascript模式?

时间:2013-09-17 14:34:35

标签: javascript design-patterns

    var AppName = (function (parent, $) {
      var controller = parent.controller = parent.controller || {};

      controller.index_page = function (parent) {
        var createPage = parent.createPage = parent.createPage || {};

        createPage.init = function () {
          alert('javascript initialized');
        };
        return createPage;
      }(controller);

      return parent;
    }(AppName || {}, jQuery));  

是哪种类型的Javascript模式?我在哪里可以找到更多关于它的信息?

4 个答案:

答案 0 :(得分:8)

这称为模块模式(至少这就是我所知道的名称)。

http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

此模式的一些好处包括:

  • 封装,使您能够在闭包中定义私有字段。

  • 您可以通过指定未定义的第三个参数并向其传递任何内容来确保未定义的值始终是正确的(这是因为未定义的实际上可以在javascript中被覆盖。)

  • Javascript命名空间,可以更清晰地分离关注点。

使用未定义方法的例子如下:

var AppName = (function (parent, $, undefined) { //add parameter for undefined here
  var controller = parent.controller = parent.controller || {};

  controller.index_page = function (parent) {
    var createPage = parent.createPage = parent.createPage || {};

    createPage.init = function () {
      alert('javascript initialized');
    };
    return createPage;
  }(controller);

  return parent;
}(AppName || {}, jQuery)); //do not define anything for the undefined parameter here.

函数末尾括号的目的是立即调用函数并形成闭包,使您可以访问公共变量/函数,同时隐藏私有变量/函数。这被称为立即调用的函数表达式(IIFE),有时称为iffy。

答案 1 :(得分:3)

它被称为module pattern

特别是这是一个立即调用的函数

var Module = (function(parameters) {

})(parameters)

我建议看看Addy Osmani的全书,而不仅仅是我上面链接的部分。

答案 2 :(得分:1)

这里的答案是正确的。

所以这本书很棒,你可以在javascript中找到很多关于模式的内容,也有很多关于模块模式的内容:

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

答案 3 :(得分:-1)

  

我在哪里可以找到更多关于它的信息?

我在Stoyan Stefanov的一本名为面向对象的Javascript 的书中看到了这种模式。

http://www.amazon.co.uk/Object-Oriented-Javascript-Stoyan-Stefanov/dp/1847194141