【问题标题】:What type of Javascript Pattern is it? [duplicate]它是什么类型的 Javascript 模式? [复制]
【发布时间】:2013-09-22 01:31:19
【问题描述】:
    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 模式?在哪里可以找到有关它的更多信息?

【问题讨论】:

  • @Bergi 在将其添加为重复项之前,请检查提出问题的日期。
  • 日期对于问题是否与同一主题以及答案的质量有何关系?

标签: javascript design-patterns


【解决方案1】:

这被称为模块模式(至少我知道它的名字)。

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

这种模式的一些好处包括:

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

  • 您可以通过指定 undefined 的第三个参数并且不向其传递任何内容来确保 undefined 值始终正确(这是因为 undefined 实际上可以在 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
  • 您还可以添加自调用(立即调用)函数等术语,默认为||
  • @Saanch 这种模式在正确实施时非常有用,任何认真的 JavaScript 开发人员都应该在适当的时候研究和采用这种模式。
  • @BenM 是不是比显示模块模式更好?
  • @Saanch 在某些情况下可能会更好,但总的来说我会说不。模块模式允许使用诸如覆盖公共函数之类的技术。
【解决方案2】:

它被称为module pattern

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

var Module = (function(parameters) {

})(parameters)

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

【讨论】:

    【解决方案3】:

    这里的答案是正确的。

    所以这是一本很棒的书,您可以在其中找到很多关于 javascript 模式和模块模式的信息:

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

    【讨论】:

      【解决方案4】:

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

      我在 Stoyan Stefanov 的一本名为 Object-Oriented Javascript 的书中看到了这种模式。

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

      【讨论】:

      • 注意完全正确的答案。
      • 不,不是.....但它回答了您的一个问题
      猜你喜欢
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多