我想在对象中使用匿名函数

时间:2012-12-10 20:10:09

标签: javascript oop function settimeout infinite-loop

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

我希望它看起来像这样:

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

这样做

1 个答案:

答案 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在全局上下文中执行,因此thiswindow - 对象。局部变量self “注入”当前(和期望的)this - self

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