gpt4 book ai didi

javascript - 'self = this' vs 应用或绑定(bind)? ( Backbone )

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:13:47 26 4
gpt4 key购买 nike

在我的 Backbone 代码中,我经常遇到这样的情况:我将闭包传递给某个函数并丢失“this”的上下文。

一段时间以来,我的解决方案一直是做我看到其他人做的事情:

var self = this;

this.deferred.done(function () {
self.render();
});

或者实际上我切换到了 _this = this,但这不是重点。它有效,但感觉很难看,有时我不得不经常这样做。所以我想找出一个更好的方法来做到这一点。我了解到我可以这样做:

this.deferred.done(function () {
this.render();
}.apply(this));

而且我想我也可以使用 Underscore 来做到这一点:

this.deferred.done(_.bind(function () {
self.render();
}, this));

apply 方法看起来最简洁,但我觉得它有副作用(我只是还不知道它是什么)。

编辑:

看看这个 JSbin,我在其中使用类似于我提到的应用: http://jsbin.com/qobumu/edit?js,console

它可以工作,但同时会抛出错误。如果我将 apply 更改为 bind,它会工作并且不会引发错误。

最佳答案

  • Function.bind是一种 native 方法,除非您正在为古董浏览器编码,否则不需要下划线。正是 @dandavis 所说的:this.deferred.done(this.render.bind(this))(但请注意 bind 也可以绑定(bind)函数参数,而不仅仅是 这个)

  • 如果您实际上是在为尖端浏览器或 node.js 4 编写代码,则可以使用箭头函数将 this 按词法绑定(bind)到函数所在范围内的任何内容定义,所以你可以写:this.deferred.done(() => { this.render() });

关于javascript - 'self = this' vs 应用或绑定(bind)? ( Backbone ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com