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

标签 javascript backbone.js

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

这有效(proxyLoginSuccess 中的某些内容会引发错误,因为我认为它脱离了上下文):

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

但这不是

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

代理登录成功是:

this.proxyLoginSuccess = options.loginSuccess;

我在这里遇到上下文问题,不知道如何解决这个问题,感谢任何线索吗?

最佳答案

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

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();
});

或者 native ( MDN Polyfill for older browsers ),

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

可能还有更多方法,但我更喜欢第一个选项。

关于javascript - javascript 中的函数上下文问题 - 主干,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288010/

相关文章:

javascript - Backbone.js 和嵌入式一对多关联

javascript - .AppendChild() 在执行脚本后不显示

javascript - 从路由目录中的 js 文件在 Node.js Express 中进行 REST 调用

javascript - 按值或 ID 选择更多复选框

jquery - Backbone .js和node.js与jQuery完全不同吗?

Backbone.js 菜鸟被相互矛盾的教程弄糊涂了

javascript - backbone.js:影响集合中不同模型的 View 中的按钮

javascript - 在 javascript 中使用 router.navigate 隐藏一些详细信息

javascript - 没有 toString 方法

javascript - 具有多个值的单选按钮逻辑