奇怪的Javascript语法"重复"方法调用

时间:2014-08-26 09:33:09

标签: javascript jquery syntax

我在一些生产代码中偶然发现了以下javascript代码段。它适用于Chrome& IE,但它不是我以前见过的语法。特定代码段使用jquery vegas插件在计时器上旋转一些图像背景,并在图像上覆盖透明像素网格。

这是生产中的代码。

$(function () {
    $.vegas('slideshow', {
        delay: 10000,
        backgrounds: [
            { src: '@Url.Content("~/Images/1.jpg")', fade: 3000 },
            { src: '@Url.Content("~/Images/2.jpg")', fade: 3000 }
        ]
    })('overlay', {            //<<<----- LOOK AT THOSE TOUCHING PARENTHESES
        src: '@Url.Content("~/Content/Overlays/02.png")'
    });
});

这似乎与更“可读”的形式相同。

$(function () {
    $.vegas('slideshow', {
        delay: 10000,
        backgrounds: [
            { src: '@Url.Content("~/Images/1.jpg")', fade: 3000 },
            { src: '@Url.Content("~/Images/2.jpg")', fade: 3000 }
        ]
    })

    $.vegas('overlay', {
        src: '@Url.Content("~/Content/Overlays/02.png")'
    });
});

所以看来在第二对括号中传递第二组参数,第二次使用第二组参数重新执行相同的方法,但是我很难找到搜索这个的术语javascript语法的类型,因为它不是我在其他语言中看到的东西。

任何人都可以解释。

3 个答案:

答案 0 :(得分:3)

这是method chaining的一种形式,但该方法返回一个方法而不是一个对象。

方法链接的常用形式是返回对象(this),以便您可以在同一对象上调用另一个方法:

$.vegas( ... ).vegas( ... );

当方法返回方法而不是对象时,可以再次调用它而不指定名称:

$.vegas( ... )( ... );

答案 1 :(得分:2)

JavaScript中的匿名函数通常使用相同的语法。我相信在声明一个函数之后你可以使用()

来调用它

看起来$ .vegas()被链接或再次调用。

如果$ .vegas()返回自己,那么你可以用这种方式链接对它的调用。

也许搜索链接函数调用。

答案 2 :(得分:2)

你有这样的事情:

$.vegas()()

这似乎通过$ .vegas()返回函数值,然后又调用函数。

例如。如果$ .vegas()返回something,那么它现在会调用如下:something()