0

如果我想在 Backbone 视图中调用一个函数,我必须这样调用它。

this.functionName()

如果我想在forEachOrjquery's each函数中调用相同的函数,this这里指的是不同的上下文。所以我需要保持视图对其他变量的引用,我必须使用它,如下所示。

refresh: function () {
   var view = this;

   $("#list").each (function () {
       view.functionName();
   })
}

最后,如果我看看我的观点,我几乎所有的函数都是这样声明的。有没有人为此找到更好的选择?

4

3 回答 3

5

由于您使用的是 Backbone,因此您已经有了下划线。使用下划线可以为每个调用指定上下文。

refresh: function() {

   _.each($("#list"), function() {
      this.functionName()
   }, this))

}
于 2013-10-08T09:17:05.423 回答
1

这在 Javascript 中确实很常见,按照惯例,它们称为变量that

var that = this

jQuery 还有一个proxy()函数,它将调用一个函数并将上下文变量 ( this) 设置为您分配的内容:http: //api.jquery.com/jQuery.proxy/

所以你可以做这样的事情:

refresh: function() {

   $("#list").each($.proxy(function() {
       view.functionName()
   }, this))

}

但大多数时候它甚至更难以阅读。老实说,我从来没有使用过proxy(),我也想不出什么时候使用它的好例子,但是很高兴知道它的存在,也许你会需要它。

于 2013-10-08T07:57:26.627 回答
0

惯例是定义var that = this;var self = this;var _this = this;

我认为非常理智的Airbnb JavaScript Style Guide提倡后者。(您可能需要滚动一点以找到肉)。

于 2013-10-08T10:56:17.587 回答