Прошу прощения, если это дубликат. Я попытался найти решение для этой точной проблемы, но ничего не мог придумать.
Здесь у меня есть литерал Object:
var Facets = {
searchresults: {},
init: function() {
$('.class').on("click", function(e){
e.preventDefault();
Facets.searchAll();
Facets.getFacets();
});
},
searchAll: function(){
// Some ajax code
this.searchresults = data;
},
getFacets: function(){
$('.somenode').each(function(){
var url = this.makeURL(somedata);
});
},
makeURL: function(){
// creates URL
}
};
Facets.init();
Проблема в том, когда метод getFacets
вызывает this.makeURL
, я получаю сообщение об ошибке. Я не совсем уверен, почему, потому что я думал, что вызов getFacets
имеет контекст объекта Facets
.
То, как я понимаю, это то, что когда обработчик события запускается, он имеет контекст window
. Поэтому я вызываю Facets.getFacets
и Facets.searchAll
чтобы эти функции знали, что звонить. Но я знаю, что не понимаю что-то правильно...
Я также попробовал Facets.getFacets().call(this)
чтобы получить правильный контекст, но это не сработало.
Вы можете захватить область следующим образом:
var Facets = {
searchresults: {},
init: function() {
$('.class').on("click", function(e){
e.preventDefault();
Facets.searchAll();
Facets.getFacets();
});
},
searchAll: function(){
// Some ajax code
this.searchresults = data;
},
getFacets: function(){
var self = this;
$('.somenode').each(function(){
var url = self.makeURL(somedata);
});
},
makeURL: function(){
// creates URL
}
};
Facets.init();
this
такое .... этоFacets
, вуаля, измениthis
наFacets