以myFunc(arg).something()的格式理解javascript函数调用

时间:2010-09-16 22:19:20

标签: javascript jquery

我正在尝试理解jQuery和其他人使用的Javascript函数的格式。

例如jQuery(arg).hide()$("#obj").hide

我想写类似的格式函数,但我不明白如何。

我知道怎么写

function myFunc(args) {
}

但我不明白第二部分即.hide() 是一个函数内的函数吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:5)

它被称为method chaining。实现此目的的方法是让您的第一个函数返回一个对象,因此第二个函数可以作为该对象的方法调用。

执行此编程风格的标准方法是始终返回相同类型的对象,因此,例如,jQuery始终返回表示HTML节点集合的jQuery对象。如果其中一个调用修改了集合,则下一个调用将在该集合上。这就是你可以做$('#myid').parent().hide();之类的事情。 $('#myid')返回表示#myid元素的jQuery对象,.parent()返回表示#myid父元素的jQuery对象。 .hide()返回相同的对象,因此您可以根据需要在同一对象上调用另一个方法。

答案 1 :(得分:0)

这称为方法链。我强烈建议选择Crockford的“JavaScript:The Good Parts”。这是一个非常快速的阅读,但奇妙地解释了JavaScript中的OOP并识别好的与坏的语言功能。强烈推荐它。

答案 2 :(得分:0)

正如Skilldrick指出的那样,这称为方法链。

最直接的例子是当你调用它的任何方法时自动返回的对象:

var world = {
    'hello': function() {
        alert('Hello');
        return this;
    },
    'goodbye': function() {
        alert('Goodbye');
        return this;
    }
};
world.hello().goodbye();

这与world.hello(); world.goodbye();相同。

jQuery做的不止于此。在有效的选择器字符串上调用jQuery$函数将返回表示匹配元素的jQuery对象(它实际上不是数组,但您可以将其视为一个数组)。它的大多数方法都会在修改对象后返回对象本身(例如$("a").css({...})将对匹配元素的样式应用更改,然后再次返回匹配元素集。)

但是一些jQuery方法允许修改您正在使用的集合(例如$("a").parent()将返回表示匹配元素的jQuery对象。也就是说,它们不会返回相同的对象,而是返回行为相同的对象。

但是,如果您决定使用此样式,则必须小心,因为如果您需要一个具有自己的返回值的方法(例如,如果您需要计算或getter方法),则流会中断。通过将回调函数传递给方法可以避免这种情况,但结果编码样式可能会非常复杂。