链接函数(例如 $('#id').function1().function2();
)和使用函数作为回调函数(例如 $ ('#id').function1(function2());
)?
例如,当单击 div#nr1
或 div#nr2
时,以下代码(对我来说)执行完全相同的操作,只是使用回调函数更加冗长:
<html>
<head>
<title>PageTitle</title>
<style>
div#nr1,
div#nr2 {
width: 100px;
height: 100px;
background-color: #ccc;
}
</style>
</head>
<body>
<div id="nr1">A</div>
<br />
<div id="nr2">B</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script>
$(function() {
$("#nr1").click(
function() {
$(this).fadeToggle(1000).fadeToggle(1000);
});
$("#nr2").click(
function() {
$(this).fadeToggle(1000, function() {
$(this).fadeToggle(1000);
});
});
});
</script>
</body>
</html>
什么时候建议使用其中一种方法?
最佳答案
这两种方法有很大的区别。在您的示例中没有区别,因为您想在同一个对象上执行该方法。
我将从相似之处开始。这两个方法都会在前面的方法完成后调用。(这里没什么新内容)。
第一个方法,方法链接通常会将对象上的所有更改传递给该函数,因此如果您有
$('.my-class').method1().method2();
method1()
和 method2()
在 DOM 对象 $('.my-class') 上执行,更改它们上的某些内容(当然,返回this
,以便它们可以链接起来)。如果您注意到,我一开始就说“通常”,这是因为链式方法可以操作其他对象,而不一定是它们传递的对象(但这对于可链式函数来说是一种奇怪的行为)。
如果您希望回调操作同一个对象 $(this)
(就像在您的代码中一样),则第二种方法 callbacks 是没有用的。如果您将回调用于可链接方法的目的,那么您的代码将不那么可读。如果您希望在函数末尾对其他对象执行某些操作,通常会使用回调方法,如下所示:
$('.my-class').method1(function(){
$('#my-id').method2();
});
例如,animate 方法集成了两种实践。如果您希望使用相同的动画来操作前一个对象,请将它们链接起来,但如果您希望在函数末尾更改变量,请回调它。
关于javascript - jQuery 中的链接函数和使用回调函数有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28252362/