JavaScript / jQuery上下文 - 代理?

时间:2012-06-27 06:49:05

标签: javascript jquery scope

我必须以同步方式为元素设置动画(即等到动画(本例中为fadeIn())完成,所以我可以继续)。

据我所知,我有三个选择:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do something else here...
    });
}

另一种方法(使用$ .proxy()来改变上下文):

doSomething: function () {
    $('.someElement').fadeIn($.proxy(function () {
        this.doSomethingElse();
    }, this));
},

doSomethingElse: function () {
    // ...
}

然而,因为使用$ .proxy()有点“混合”上下文而我真的不喜欢这个(因为我只是不知道什么时候它会回来咬我的屁股),我是有时使用这种方法:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        doSomethingElse();
    });

    function doSomethingElse () {
        // ...
    }
}

现在我想知道,有没有更好的方法?更简单,更优雅的东西。像:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do this in an async way...
    });

    // simply do something else here...
}

这个问题确实让我感到困惑,因为我喜欢干净的代码而且我不喜欢这种简单但不干净的解决方案。

2 个答案:

答案 0 :(得分:2)

创建一个调解变量以引用原始对象:

doSomething: function () {
    var that = this;
    $('.someElement').fadeIn(function() {
       // use "that" here
    });
}

答案 1 :(得分:0)

如果doSomethingElse()是另一个动画,则可以保持原始上下文链接和排队。