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

loadNewsFeedここでの問題は、オブジェクトニュースに!というメソッドがないことを示していることです。

匿名関数をオブジェクトNewsの外に置くと、すでに機能するようになっています。

このような:

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も実行されます。ローカル変数は、現在の(そして必要な)ものを「注入」します。undefinedsetInterval
thiswindowself thisself

編集2:すぐに実行
され、ハンドラーが登録されます。

于 2012-12-10T20:13:35.973 に答える