jQuery Vs MVC中关键字"this"的含义

tes*_*dtv 6 javascript jquery javascript-framework backbone.js

我试图理解使用关键字"this"的区别,或者更确切地说它在jQuery Vs和Backbone等MVC框架中所代表的含义.

以下是每个的2个代码示例; 所以在jQuery中,我们有

$("#result").click(function(){
$(this).html(someval);
})
Run Code Online (Sandbox Code Playgroud)

在Backbone中,我们有代码;

var HandlebarsView = Backbone.View.extend({
el: '#result'
initialize: function(){
this.template = Handlebars.compile($('#template').html());     
},
render: function(){
var html = this.template(this.model.toJSON());
this.$el.html(html);
}
});
Run Code Online (Sandbox Code Playgroud)

现在我明白"this"是指jQuery中的DOM元素.

我想了解它在Backbone代码中的含义.

请告诉我.

Der*_*ley 3

this是函数执行的上下文。

理解的技巧this是理解执行函数的方式决定了它。

当您将函数传递给 jQuery 之类的方法时,您正在将该函数用作回调方法。jQuery 在执行时显式设置回调的上下文。

当您使用点表示法调用对象上的方法时:myView.render()点表示法将方法调用的上下文显式设置为点前面的对象。

JavaScript 中上下文设置的规则非常简单,但可能会引起很多混乱。大多数语言将自引用上下文变量设置为定义该方法的对象。但是,JavaScript 使用方法调用模式来确定上下文。

当我们将任何对象的方法作为回调方法传递时,调用它的代码会设置该方法的上下文 - 这包括 Backbone 的视图和其他对象。您可以使用 Underscore.jsbindbindAll函数(http://documentcloud.github.com/underscore/#bind)以及其他一些技巧来显式覆盖它。


Backbone.View.extend({
  initialize: function(){
    _.bindAll(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

例如,此代码会将当前视图对象上的所有函数的上下文绑定到视图。这保证了视图方法的上下文始终是视图本身。

欲了解更多信息,请参阅: