JavaScript - вызов внутреннего метода из обработчика событий

0

Прошу прощения, если это дубликат. Я попытался найти решение для этой точной проблемы, но ничего не мог придумать.

Здесь у меня есть литерал 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) чтобы получить правильный контекст, но это не сработало.

  • 0
    остановись и подумай, что this такое .... это Facets , вуаля, измени this на Facets
Теги:

1 ответ

1
Лучший ответ

Вы можете захватить область следующим образом:

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();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню