我一直在努力将这些“this”与 .bind() 方法一起使用以及变量“self = this”的使用。在得到两个不同的结果时,所以我错过了一个概念。案例如下:
// Defining a callback class to use after retrieving data
var Callback = (function(){
// UPDATED!! Local vbles
var template_to_use, html_element, self;
function Callback(){
self = this,
template_to_use = null,
html_element = null;
}
var p = Callback.prototype;
p.set_template = function(template_funct){
self.template_to_use = template_funct;
};
p.set_html_element = function(html_element){
self.html_element = html_element;
};
p.use_callback = function(data){
$(self.html_element).append(self.template_to_use(data));
};
return Callback;
})();
该函数的用法如下:
// Setup callback 1 to call after getting the data
var callback_1 = new Callback();
callback_1.set_template(use_templ_1);
callback_1.set_html_element("#list");
// Get list data
api_list.get_data(callback_1.use_callback);
// Setup callback 2 to call after getting more data
var callback_2 = new Callback();
callback_2.set_template(use_templ_2);
callback_2.set_html_element("#object");
// Get object data
api_object.get_data(callback_2.use_callback);
执行两个 ajax 调用,一旦 get_data() 函数完成,它们将调用我传递给它们的回调函数。我遇到的问题是,执行这些函数后,回调总是提到 html_element = "#object" 以及相应的模板“use_templ_2”。
如果我使用“this”和 .bind 函数而不是“self”vble,结果就是预期的结果。
// Get object data
api_object.get_data(callback_2.use_callback.bind(callback_2));
我缺少什么?这可能是一个错误概念,因为即使我对 js 不陌生,我也是对语言本身的新理解。