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

时间:2013-11-11 11:37:40

标签: javascript jquery

如果这是重复,我道歉。我已经尝试为这个确切的问题寻找解决方案,但无法提出任何建议。

这里我有一个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.getFacetsFacets.searchAll,以便这些函数知道要调用的内容。但我知道我不能正确理解......

我也尝试Facets.getFacets().call(this)来获取正确的上下文,但这不起作用。

1 个答案:

答案 0 :(得分: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();