保存';这';在异步调用之前的Javascript中
我刚刚开始学习Javascript、主干和jquery。我的同事试图用Javascript解释这个概念和上下文。他说这种模式很常见,但可能有更好的方法。我想知道这实际上是“标准”模式还是有更好的方法 基本上,这种模式是,当我在我的类中处理屏幕上看到的内容时(对我们来说,它是MVC和主干的组合),我需要获取数据来填充页面。但在我们去拿之前,我们先去拿保存';这';在异步调用之前的Javascript中,javascript,Javascript,我刚刚开始学习Javascript、主干和jquery。我的同事试图用Javascript解释这个概念和上下文。他说这种模式很常见,但可能有更好的方法。我想知道这实际上是“标准”模式还是有更好的方法 基本上,这种模式是,当我在我的类中处理屏幕上看到的内容时(对我们来说,它是MVC和主干的组合),我需要获取数据来填充页面。但在我们去拿之前,我们先去拿 var _this = this; 因为我们所做的ajax调用是异步的,所以他说如果在我们的成功处理程序中 this.model.property
var _this = this;
因为我们所做的ajax调用是异步的,所以他说如果在我们的成功处理程序中
this.model.property = // set some property from the callback
这不是我们想要的,我们需要做的
_this.model.property = // something
我想我想知道这是不是很标准。我觉得在使用了一周的Javascript之后,每次从服务器获取数据时,有时在我尝试使用下划线u.格式化页面之前,我都会这样做,因为我猜“this”也会改变我的.每个块。谢谢 范围是javascript中最棘手的部分之一,基本上,这就是您的朋友所描述的。充分理解作用域是精通javascript的关键。查看以下链接,全面了解正在发生的事情: 无论如何,我希望你喜欢javascript,它是我个人最喜欢的语言,尤其是在node.js进入我的生活之后:) 编辑:
要真正回答您的问题:所发生的事情是,在异步模式下,上下文正在丢失,因此
this
的范围发生了变化。保存它允许您以后引用它。希望这有帮助 您可以将函数绑定到上下文,这样在异步调用期间就不必使用
var _this = this
//or
var self = this;
您可以使用下划线.js绑定函数:
//this - current context
var func = function ({ this.doSomething(); });
var bindedFunction = _.bind(func, this);
因此,当您调用bindedFunction时,它将绑定到currentContext
如果您使用的是主干,通常我会绑定回调函数,因此它们会绑定到对象:
var MyView = Backbone.View.extend({
initialize: function (args) {
_.bindAll(this, 'onDataFetched');
},
fetchData: function () {
$.ajax({
//... some code
success: this.onDataFetched
});
},
onDataFetched: function(result) {
//Do something usefull here
//this = MyView instance
}
});
您也可以在函数中使用u.bind来绑定this,但正如您的同事所说,在js中存储this对象是一种非常常见的模式。这是一种标准。只需确保
\u此
变量只是一个块变量,因此当不再使用时,它会被垃圾收集