我已经很久没有使用JavaScript了,今天正在重新学习它。总有一件事情让我感到困惑,那就是this
关键字。我知道在jQuery事件处理程序中,比如click事件,this
指的是触发事件的元素。即使我的函数没有参数,this
如何传递给我作为回调函数的函数?
考虑以下代码:
$("tr.SummaryTbRow").data("Animating", false);
$("tr.SummaryTbAltRow").data("Animating", false);
$("tr.SummaryTbRow").click(function () {
if ($(this).data("Animating") == false) {
if ($(this).next(".Graph").css("display") == "none") {
$(this).data("Animating", true);
//Part I am questioning.
setTimeout(function () {
$(this).data("Animating", false);
}(this), 550);
$(this).next(".Graph").slideRow('down', 500);
}
else {
$(this).data("Animating", true);
$(this).next(".Graph").slideRow('up', 500);
}
}
});
我正在尝试弄清楚如何将类名为SummaryTbRow
的表格行元素传递给我的setTimeout回调函数。jQuery是否以类似于我使用匿名回调函数的方式传递this
?在函数内部,我的this
是否指向我传递的this
?
我知道我可以这样做:
setTimeout(function (element) {
$(element).data("Animating", false);
}(this), 550);
但是我想弄清楚jQuery是如何将this
传递给我的回调函数的,即使我的函数不需要参数。
.call/.apply
来调用回调函数,这使您可以保持上下文。 - Selvakumar Arumugam