我感觉很糟糕,因为很可能已经回答了这个问题,我只是没有使用正确的搜索字词。我是异步JavaScript的新手。所以,我将带领道歉。如果有人甚至可以帮助我获得正确的搜索条件,我将非常感激。
我正在尝试使用Google Feed 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 />');
}
}
});
};
答案 0 :(得分:1)
您正在创建tmp
变量以捕获this
(请注意,在此上下文中通常称为that
)。您甚至可以在此处正确使用此引用:tmp.sel
。但是你忘了在那之前使用它:
console.log(sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br />');
更改为:
console.log(tmp.sel + //...
你会没事的。
答案 1 :(得分:1)
你的函数params要求div而不是sel。