JavaScript - 从事件处理程序调用内部方法

JavaScript - Call internal method from event handler

本文关键字:调用 内部 方法 程序 事件处理 JavaScript      更新时间:2023-09-26

如果这是重复的,我深表歉意。我试图为这个确切的问题找到解决方案,但什么也想不出来。

在这里我有一个对象文字:

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