0

我感觉很糟糕,因为很可能已经回答了这个问题,而我只是没有使用正确的搜索词。我对异步 JavaScript 很陌生。所以,我会先道歉。如果有人甚至可以帮助我获得正确的搜索词,我将不胜感激。

我正在尝试使用 Google 提要 API。当我按照 hello world 部分中列出的股票示例进行操作时,它就可以工作了。我正在尝试制作一些更具可扩展性的东西,以便我可以在多个地方使用它。所以我创建了一个对象...

function AlertRSS(num, url, div, date) {
  this.num = typeof num !== 'undefined' ? num : 5;
  this.url = typeof url !== 'undefined' ? url : 'http://arstechnica.com/author/caseyjohnston/feed/';
  this.sel = typeof sel !== 'undefined' ? sel : '#alert';
  this.date = typeof date !== 'undefined' ? date : this.getYesterday();
}

然后我尝试在方法内部调用对象...

AlertRSS.prototype.displayFeed = function() {
  var retval = null;
  var feed = new google.feeds.Feed(this.url);
  feed.load(function(result) {
  var tmp = this;
    if (!result.error) {
      for ( var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        console.log(sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
        $(tmp.sel).append('<h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
      }
    }
  });
};

但是,似乎我无法从对象访问属性。我一直Uncaught ReferenceError: sel is not defined在控制台中得到一个。

我认为这个问题与范围有关,但在这一点上,我觉得有点超出我的深度。非常感激任何的帮助。

更新

对于第一篇文章,这是一个讽刺。我的代码中有很多错误。两种回答都是正确的。但是,如果像我这样的另一个可怜的新手看到这个问题,我想把工作代码放在那里。

问题原来是var tmp = this;线路的位置。它需要放置在内部回调函数之外才能工作。根据 Tomasz Nurkiewicz 的建议,我也var tmp改为var that. 工作代码如下:

function AlertRSS(num, url, sel, date) {
  this.num = typeof num !== 'undefined' ? num : 5;
  this.url = typeof url !== 'undefined' ? url : 'http://arstechnica.com/author/caseyjohnston/feed/';
  this.sel = typeof sel !== 'undefined' ? sel : '#alert';
  this.date = typeof date !== 'undefined' ? date : this.getYesterday();
}

AlertRSS.prototype.displayFeed = function() {
  var feed = new google.feeds.Feed(this.url);
  var that = this;
  feed.load(function(result) {
    if (!result.error) {
      for ( var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        console.log(that.sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
        $(that.sel).append('<h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
      }
    }
  });
};
4

2 回答 2

1

您正在正确地创建tmp要捕获的变量this(请注意,通常that在此上下文中调用它)。你甚至在这里正确地使用了这个参考:tmp.sel。但是,您忘记在此之前使用它:

console.log(sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');

改成:

console.log(tmp.sel + //...

你会没事的。

于 2012-06-19T21:20:51.083 回答
1

您的函数参数要求 div 而不是 sel。

于 2012-06-19T21:22:00.913 回答