有一个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;
之类的代码。
答案 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
范围内声明的varjQuery.query
等代码
请注意,{{1}} 对象没有范围,但产生它的模块IIFE具有。其中定义的每个函数都可以访问local variables of that inner scope,但也可以访问(本地)variables of the parent scope。当然,这个额外的内在范围是完全没用的。