.bind() 메서드 및 "self = this"변수 사용시 "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);
두 아약스 호출이 실행되고 get_data() 함수가 수행되면, 그들은 콜백 함수를 호출합니다 나는 그들에게 넘어 갔다. 내가 겪고있는 문제는 해당 함수를 실행 한 후 콜백은 항상 해당 템플릿 "use_templ_2"로 html_element = "#object"를 언급한다는 것입니다.
"this"와 "self"vble 대신 .bind 함수를 사용하면 결과가 예상됩니다.
// Get object data
api_object.get_data(callback_2.use_callback.bind(callback_2));
무엇이 누락 되었습니까? 내가 js에 익숙하지 않더라도, 나는 언어 자체를 완전히 이해하고 있기 때문에 오류 개념 일 수 있습니다.
'self' 변수를 지역 변수로 정의하지 않으므로 두 함수 모두 * 동일한 * 전역 변수를 사용합니다. – JJJ
우선 jQuery의 아주 오래된 버전을 사용하지 않으면 .bind()를 사용하지 마십시오. on()이 현재 선호되는 메소드입니다. – trysis
@Juhana :'var'가 누락 된 것처럼 보입니다. 마지막 항목을 제외한 모든 항목에 쉼표가 있습니다. –