0

次の構造に従うコードがいくつかあります。

function = roulette(){

    _this = this;
    this.spin = spin;
    this.timeoutFunction = timeoutFunction;

    this.object1 = {
        x : 0
    }

    function spin(){
        if (typeof this.shuffleTimer !== 'undefined') {
            clearTimeout(_this.shuffleStart);
        }
        this.shuffleStart = setTimeout(_this.timeoutFunction(), _this.object1.x);
    }

    function timeoutFunction(){
        this.object1.x += 5;
        //do some DOM manipulation here
        console.log(_this.object.x);
        if(this.object1.x < 5000){
          this.shuffleStart = setTimeout(_this.timeoutFunction(), _this.object1.x);
        }
    }
}

それは間違いなく意図したとおりに機能していません - ログが増加している間、console.logそれthis.object1.xはあまりにも速く均一な速度で行われています.呼ばれた時間。setTimeouttimeoutFunction

4

2 に答える 2

0

setTimeout は、コールバックとしてインライン関数を持ちたいと考えています。これを変える:

 this.shuffleStart = setTimeout(_this.timeoutFunction(), _this.object1.x);

これに:

 var ctx = this;
 this.shuffleStart = setTimeout(function(){ctx.timeoutFunction()}, _this.object1.x);
于 2013-08-20T17:37:15.860 に答える