0

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

这里我有一个对象文字:

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.getFacetsandFacets.searchAll以便这些函数知道要调用什么。但我知道我没有正确理解某些东西......

我也试图Facets.getFacets().call(this)获得正确的上下文,但这没有用。

4

1 回答 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();
于 2013-11-11T11:41:16.460 回答