无法理解JQuery扩展对象声明背后的一些语法

时间:2014-08-14 18:53:09

标签: javascript jquery

有一个jquery.query-object.js扩展名以这种方式实现:

new function(settings) { 
  var $separator = settings.separator;
  ...

  jQuery.query = new function() {
   ...
  }
}

.$query对象为您提供了一些服务,但传递设置对象背后的魔力让我感到困惑。我必须在jquery.query-object.js文件引用旁边写下这样的内容:

<script type="text/javascript">
    jQuery.query = { separator: '|' };
</script>

我无法将这两部分嫁给我的大脑。谁可以解释一下javascript / JQuery如何设法处理上述语法来运行new function(settings)?令我困惑的是像jQuery.query范围声明的var $separator = settings.separator;之类的代码。

1 个答案:

答案 0 :(得分:1)

如果您的意思是this file,那么new function只是滥用new关键字来创建IIFE with a local scope - 类似于exclamation mark can be used。在jQuery.query = new function() { … }执行new queryObject(location.search, location.hash);时,这种滥用情况会更糟,其中IIFE actually returns$separator = settings.separator;一样,在揭示模块模式中。

  

让我感到困惑的是,jQuery.query范围内声明的var jQuery.query等代码

请注意,{{1}} 对象没有范围,但产生它的模块IIFE具有。其中定义的每个函数都可以访问local variables of that inner scope,但也可以访问(本地)variables of the parent scope。当然,这个额外的内在范围是完全没用的。