0

我有一段代码运行良好,但我无法理解它背后的想法,因此感谢您的帮助。

在下面的函数中,bind(this)函数在代码末尾做了什么?我已经搜索了很多 SO 和 JQuery 文档,但找不到任何这样的用法。try 将函数连接到事件的所有用法,bind()但这里 bind 在函数之后调用并传递一个 JQuery 对象(在这种情况下是一个 img 标记)。提前致谢。

function refreshCaptcha() {
    var currCaptcha = $('#captcha-div img');

    currCaptcha.animate({
        opacity: 0.3
    }, 300);

    $.getJSON("/captcha.json", function (data) {
        var src = $("#captcha-template").html();
        var template = Handlebars.compile(src);
        var newSrc = template(data);
        var srcDom = $(newSrc);

        srcDom.eq(0).css('opacity', 0).load(function() {

            currCaptcha.animate({
                opacity: 0
            }, 250, function() {
                $("#captcha-div").html(srcDom);

                $(this).animate({
                    opacity: 1
                }, 250);

            }.bind(this));
        });
    });
}
4

1 回答 1

0

bind创建一个新函数,该函数在调用时将其this值设置为传递的第一个参数。因此,在这种情况下,animate回调将在调用时将其上下文设置为srcDom.eq(0)

    srcDom.eq(0).css('opacity', 0).load(function() {

        // In here, the value of "this" is srcDom.eq(0)

        currCaptcha.animate({
            opacity: 0
        }, 250, function() {
            $("#captcha-div").html(srcDom);

            $(this).animate({
                opacity: 1
            }, 250);

        }.bind(this)); /*When that callback is invoked, all 
                         occurrences of "this" inside it will refer 
                         to srcDom.eq(0)*/

    });

更多关于这里

于 2012-12-06T10:37:48.197 回答