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代码中的含义.
请告诉我.
this
是函数执行的上下文。
理解的技巧this
是理解执行函数的方式决定了它。
当您将函数传递给 jQuery 之类的方法时,您正在将该函数用作回调方法。jQuery 在执行时显式设置回调的上下文。
当您使用点表示法调用对象上的方法时:myView.render()
点表示法将方法调用的上下文显式设置为点前面的对象。
JavaScript 中上下文设置的规则非常简单,但可能会引起很多混乱。大多数语言将自引用上下文变量设置为定义该方法的对象。但是,JavaScript 使用方法调用模式来确定上下文。
当我们将任何对象的方法作为回调方法传递时,调用它的代码会设置该方法的上下文 - 这包括 Backbone 的视图和其他对象。您可以使用 Underscore.jsbind
和bindAll
函数(http://documentcloud.github.com/underscore/#bind)以及其他一些技巧来显式覆盖它。
Backbone.View.extend({
initialize: function(){
_.bindAll(this);
}
});
Run Code Online (Sandbox Code Playgroud)
例如,此代码会将当前视图对象上的所有函数的上下文绑定到视图。这保证了视图方法的上下文始终是视图本身。
欲了解更多信息,请参阅:
归档时间: |
|
查看次数: |
242 次 |
最近记录: |