我看了here并且基本上(据我所知)你不能对函数和对象使用相同的名称,但是看下面的代码,这似乎不是案子。谁能告诉我它是如何工作的?
;(function($){
$.fn.superfish = function(op){
var sf = $.fn.superfish,
c = sf.c,
$arrow = $(['<span class="',c.arrowClass,'"> »</span>'].join('')),
...
};
var sf = $.fn.superfish;
...
sf.c = {
bcClass : 'sf-breadcrumb',
menuClass : 'sf-js-enabled',
anchorClass : 'sf-with-ul',
arrowClass : 'sf-sub-indicator',
shadowClass : 'sf-shadow'
};
...
})(jQuery);
而superfish在其声明中引用了自己。这不会导致无限递归吗?
答案 0 :(得分:4)
它不是递归,因为它不是在调用自身。 它引用了对象的属性。
如果你看到这样的话:
var sf = $.fn.superfish(),
比出现问题。 :)
答案 1 :(得分:2)
这是一种常用技术,允许您存储对某些深层嵌套属性的引用,并使用它来实现可读性和性能。 Crockford's article是相关的。
// some really deeply nested property
var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla;
// i could type...
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true;
// or just
o.bing = true;
在这种情况下,深层嵌套的属性就是对象本身,但javascript并不关心。
This fiddle演示了您遇到问题的确切javascript功能。这就是javascript的工作方式。并不是说我将这个功能作为一个范例基础,但它是可能的。