这是什么Javascript/jQuery模式来封闭和隐藏所有内容,但仍然可以改变页面?

这是什么Javascript/jQuery模式来封闭和隐藏所有内容,但仍然可以改变页面?,javascript,jquery,Javascript,Jquery,有没有人想出了这个模式,所以它是一个著名的和众所周知的模式? 我在使用Javascript/jQuery时看到了这种模式,例如在init.js中: var Initializations = {}; Initializations = (function($) { function doSomething(i, domElement) { // ... } $(function() { $("#foo").click(function() { /

有没有人想出了这个模式,所以它是一个著名的和众所周知的模式? 我在使用Javascript/jQuery时看到了这种模式,例如在
init.js
中:

var Initializations = {};

Initializations = (function($) {

  function doSomething(i, domElement) { 
    // ... 
  }

  $(function() {
    $("#foo").click(function() {
      // ...
    });
    $(".bar").each(doSomething);
  });

})(jQuery);
因此,它看起来可以“隐藏”全局范围内的几乎所有内容,避免冲突(如果另一个库也使用
$
作为变量),并且HTML页面可以使用jQuery由该代码更改。代码对全局范围几乎没有任何作用(除了变量
初始化
),即使存在 两个jQuery版本,如果它们可以用两个变量表示,那么代码甚至可以使用两个jQuery库,只需更改上面代码的最后一行 到
jQuery161
(例如,如果某些第三方代码需要jQuery 1.4.2,并且您的代码一直在使用jQuery 1.6.1进行新功能和/或错误修复)

上面的代码可以改进吗?我想知道为什么额外的变量
会初始化
,为什么不只是:

(function($) {

  function doSomething(i, domElement) { 
    // ... 
  }

  $(function() {
    $("#foo").click(function() {
      // ...
    });
    $(".bar").each(doSomething);
  });

})(jQuery);

如果它起作用,就用它


就我个人而言,我认为您正在深入了解刚才发布的代码片段。这在Javascript中是一种相当标准的技术。

如果可行,就使用它

jQuery(function($, undefined) {

  function Something(i, domElement) { 
    // ... 
  }

  Something.prototype.doSomething = ...

  var something = new Something(10, $("#foo")[0]);
  something.doSomething();

});
就我个人而言,我认为您正在深入了解刚才发布的代码片段。这是Javascript中相当标准的技术

jQuery(function($, undefined) {

  function Something(i, domElement) { 
    // ... 
  }

  Something.prototype.doSomething = ...

  var something = new Something(10, $("#foo")[0]);
  something.doSomething();

});
是的,可以改进。你的例子是一个开始。我建议你在混合中加入一些OOP


是的,可以改进。你的例子是一个开始。我建议你也在混合中加入一点OOP。

看看。它们与您发布的内容类似,但更进一步,说明了为什么要使用Initializations变量命名名称空间。

请看一看。它们与您发布的内容类似,但更进一步,说明了为什么您希望使用jQuery或Javascript中的Initializations var.

标准技术来命名名称空间?如果是Javascript(不是jQuery),它是什么样子的?jQuery或Javascript中的标准技术?如果是Javascript(不是jQuery),它是什么样子的?10是什么,并且您的初始代码似乎已经删除了循环
每个
?@CantSpellYourName:(.是的,这只是一个通用模型。你可以让构造函数做任何你想做的事情。你可以让2、5、20个构造函数,每个都控制你页面上的一个特定功能。你忘记了复制和粘贴了吗?10是什么,你的初始代码似乎已经删除了循环
每个
?@CantSpellYourName:(.是的,它只是一个普通的模型。你可以让构造函数做任何你想做的事情。你可以让2、5、20个构造函数在你的页面上控制一个特定的功能。你忘了复制和粘贴了吗?但是,
初始化
从来没有被使用过——它不是创建这个对象,而是隐藏一切。所以不使用任何变量都是好的,或者是否有添加变量的动机?您询问了有关模式的问题,因此我发布了与您发布的代码类似的模式的信息。您似乎在询问如何在希望立即执行且仅执行一次的代码块中从全局范围隐藏变量。在这种情况下,您可以像在y中那样执行我们的第二个示例。这是JavaScript的一个功能,称为自动执行匿名函数。它不是一个模式。有一些基于自动执行匿名函数的OOP模式,但这只是语言本身的一个功能。但是,
初始化
从未使用过——它不是创建此对象,而是隐藏所有内容。So没有使用任何变量,或者有任何动机添加变量吗?您询问了模式,所以我发布了与您发布的代码类似的模式的信息。您似乎在询问如何在希望立即执行且仅执行一次的代码块中从全局范围隐藏变量。在这种情况下,您可以执行以下操作:你在第二个例子中没有这样做。这是JavaScript的一个特性,称为自动执行匿名函数。它不是一个模式。有基于自动执行匿名函数的OOP模式,但这只是语言本身的一个特性。