-1

JavaScript に問題がthisあります。setIntervalここSOでいくつかのソリューションを読みましたが、それらを機能させることができませんでした。これが私のコードです:

var timer_func = function(){
    var that = this;
    var inspect = function(clusters){

        var clength = "";

        for(var i = 0; i < that.clusters.length; i++){   //---> undefined that.clusters.length
            clength += that.clusters[i].processes.length + ",";
        }

        console.log(clength);
    }

    var inspector = setInterval(inspect, 1000);
};
//much later
timer_func();

私は 100%this.clusters呼び出し前にコードで呼び出されるものを初期化しますがtimer_func()、アクセスしようとしている変数は明らかに未定義です (一方、タイムアウト外の別の場所に出力するとそうではありません)。なにか提案を?ありがとう。

4

2 に答える 2

1

プロパティclustersがオブジェクトで定義されることも、パラメータclustersが内部関数に渡されることもありません。2つの方向のいずれかに進むか、プロパティを指定するか、パラメータを渡すことができます。

プロパティを指定します

var timer_func = function(){
    this.clusters = ["cluster1", "cluster2"];
    var that = this;
    var inspect = function(clusters){

        var clength = "";

        for(var i = 0; i < that.clusters.length; i++){   //---> undefined that.clusters.length
            clength += that.clusters[i].processes.length + ",";
        }

        console.log(clength);
    }

    var inspector = setInterval(inspect, 1000);
};
//much later
timer_func();

パラメータを渡す

var timer_func = function(){
    var that = this;
    var inspect = function(clusters){

        var clength = "";

        for(var i = 0; i < clusters.length; i++){
            clength += clusters[i].processes.length + ",";
        }

        console.log(clength);
    }

    var inspector = setInterval(function(){
       var clusters = ["cluster1", "cluster2"]; 
       inspect(clusters)
    }, 1000);
};
//much later
timer_func();

于 2013-02-12T10:21:26.280 に答える