我正在尝试理解jQuery和其他人使用的Javascript函数的格式。
例如jQuery(arg).hide()
或$("#obj").hide
我想写类似的格式函数,但我不明白如何。
我知道怎么写
function myFunc(args) {
}
但我不明白第二部分即.hide() 是一个函数内的函数吗?
感谢您的帮助
答案 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方法),则流会中断。通过将回调函数传递给方法可以避免这种情况,但结果编码样式可能会非常复杂。