1

我有这个代码用于我想使用的新闻源。

我希望它看起来像这样:

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
    }
}

这里的问题是它说 Object News 没有一个名为loadNewsFeed!

如果我将匿名函数放在对象新闻之外,我已经让它工作了。

像这样:

var news = new News();
//Load new comments every 5 sec
(function loopNews(){
    news.loadNewsFeed();
    setTimeout(loopNews,5000);
})();

那么我怎么能在对象内部News做到这一点呢?

4

1 回答 1

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)调用处理程序- 并返回这意味着它立即执行但没有设置处理程序。 处理程序函数在全局上下文中执行, -object也是如此。局部变量“注入”当前(和所需)- as 。undefinedsetInterval
thiswindowself thisself

编辑 2:现在立即
执行注册一个处理程序。

于 2012-12-10T20:13:35.973 回答