javascript中的函数上下文问题 - 主干

时间:2014-01-22 16:07:24

标签: javascript backbone.js

我在以下代码中遇到了非常有趣的问题:

这是有效的(在proxyLoginSuccess中会出现错误,因为我认为它会脱离上下文):

this.model.save()
    .done(this.proxyLoginSuccess)

但这不是

this.model.save()
    .done(function() {
        this.proxyLoginSuccess();
    })

proxyLoginSuccess是:

this.proxyLoginSuccess = options.loginSuccess;

我这里有上下文问题,不确定如何解决这个问题,欣赏任何线索?

1 个答案:

答案 0 :(得分:4)

您可以使用下划线指定运行函数的上下文

this.model.save()
.done(_.bind(function() {
    this.proxyLoginSuccess();
}, this));

或者使用jQuery,

this.model.save()
.done(Backbone.$.proxy(function() {
    this.proxyLoginSuccess();
}, this));

或者通过保留对本地范围的引用,

var self = this;
this.model.save()
.done(function() {
    self.proxyLoginSuccess();
});

或原生(MDN Polyfill for older browsers),

this.model.save()
.done(function() {
    this.proxyLoginSuccess();
}.bind(this));

可能有更多方法,但我更喜欢第一种选择。