我有这个代码用于我想要使用的新闻源。
我希望它看起来像这样:
function News(){
//Load new comments every 5 sec
setTimeout((function(){
console.log(this); //Returns Object #News
this.loadNewsFeed();
}).call(this),5000);
this.loadNewsFeed = function(){
// Implementation here
}
}
这里的问题是它说对象新闻没有名为loadNewsFeed
的方法!
如果我将匿名函数放在对象新闻之外,我已经开始工作了。
像这样:
var news = new News();
//Load new comments every 5 sec
(function loopNews(){
news.loadNewsFeed();
setTimeout(loopNews,5000);
})();
那我怎么能在里面对象News
?
答案 0 :(得分:3)
这应该有效:
function News()
{
var self = this;
this.loadNewsFeed = function(){
// Implementation here
};
//Load new comments every 5 sec
setInterval(function handler() // setInterval for endless calls
{
console.log(self); //Returns Object #News
self.loadNewsFeed();
return handler;
}(), 5000);
}
说明:
call(this)
直接调用处理程序 - 并将undefined
返回setInterval
,这意味着它会立即执行但没有设置处理程序。<登记/>
handler-function在全局上下文中执行,因此this
是window
- 对象。局部变量self
“注入”当前(和期望的)this
- self
。
编辑2:
现在立即执行 和 注册处理程序。