0

setInterval でメソッドを呼び出すのに問題があります...これが私のコードのスニペットです...

var example = function(){

    this.animate = function(){
        console.log("Animate.");
    }

    this.updateTimer = function(){ // This is being called...
        this.timer = setInterval(function(){
            this.animate(); // A "Undefined Is Not A Function" error is being thrown here.
        }, 1);
    }

}
4

2 に答える 2

2

USE BIND (@torazaburo が言ったように)

おそらくベストプラクティス

http://jsfiddle.net/rnrlabs/Lnmex1y7/

var example = function(){
    this.animate = function(){
        console.log("Animate.");
    }    
    this.updateTimer = function() { // This is being called...
        this.timer = setInterval(this.animate.bind(this), 1);
    }
}

または..閉鎖を使用する

http://jsfiddle.net/rnrlabs/zk6hdnf2/

var example = function(){

    var self = this; // this creates a closure

    this.animate = function(){
        console.log("Animate.");
    }

    this.updateTimer = function(){ 
        this.timer = setInterval(function(){
            // 'this' here means window element.
            self.animate(); 
        }, 1);
    }

}
于 2014-09-06T06:45:33.443 に答える
0

thisこのコードを使用してsetIntervalで使用することはできません

this.animate()に編集example.animate()

このコードを使用してください

var example = function(){

    this.animate = function(){
        console.log("Animate.");
    }

    this.updateTimer = function(){ // This is being called...
        this.timer = setInterval(function(){
            example.animate(); // A "Undefined Is Not A Function" error is being thrown here.
        }, 1);
    }

}
于 2014-09-06T07:42:39.007 に答える