wie kann ich das setInterval eine Funktion aufrufen, die innerhalb einer Klasse
Habe ich eine Klasse wie:
function run(){
this.interval;
this.start = function(){
this.interval = setInterval('this.draw()',1000);
};
this.draw = function(){
//some code
};} var run = new run(); run.start();
aber ich kann nicht scheinen, um Referenz - /call - this.draw()
innerhalb der setInterval-Funktion, es sagt this.draw()
ist nicht eine Funktion, und wenn ich entfernen Sie die Anführungszeichen, heißt es nutzlos setInterval aufrufen, was mache ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Wert
this
festgelegt ist, je nachdem, wie eine Funktion aufgerufen wird. Wenn Sie rufen eine Funktion als Konstruktor mitnew
dannthis
beziehen sich auf das Objekt erstellt wird. Ebenso, wenn Sie eine Funktion aufrufen, die mit Punkt-notation wierun.start()
dannthis
beziehen sich aufrun
. Aber durch die Zeit, die die Ausführung von code durch diesetInterval
heißtthis
bedeutet nicht, was Sie denken. Was Sie tun können, ist eine entsprechende Referenz speichernthis
und verwenden Sie dann die Referenz, wie folgt:Beachten Sie auch, dass Sie ' ve erstellt eine Funktion namens
run
und eine variable namensrun
- Sie brauchen, um Ihnen unterschiedliche Namen. In meinem code (in dem Bewusstsein, dass JS ist case sensitive), ich habe mich verändert die Funktionsnamen beginnen mit einem Großbuchstaben "R" - das ist die Konvention für die Funktionen, die ausgeführt werden soll, wie Konstruktoren.EDIT: OK, der Blick auf die anderen Antworten kann ich sehen, dass nur vielleicht ich zu kompliziert und es solange
draw()
nicht zugreifen müssenthis
es wäre schon fein, nur sagen:Aber mein Punkt über nicht zu geben Ihrem Konstruktor und später variable den gleichen Namen steht immer noch, und ich lasse alle
self
Zeug, weil es ist eine Technik, die Sie benötigen, wenndraw()
braucht, um Zugangthis
. Sie würden auch brauchen, um es so zu machen, wenn Sie zum hinzufügen von Parametern zu derdraw()
Funktion.this.draw
wird nicht funktionieren, wenndraw
braucht die richtigenthis
drin, wenndraw
heißt in dersetInterval(this.draw, 1000)
versionthis
wirdwindow
innendraw
. Alleself
Zeug ist notwendig, wenndraw
verwendet eine Instanz-Eigenschaften (d.h. wenn es wirklich eine Methode, die nicht nur mit einer einfachen Funktion).draw
mit "code", die muss sich nicht unbedingtthis
, aber dann ist es wahrscheinlich nicht eine sehr nützliche Methode, wenn es nicht funktioniert, also...ich werde mein edit Bearbeiten...Den bind() Methode!
Siehe das folgende Beispiel, in ES6:
HTML:
draw()
? Ich bin damit einverstanden, dass Yas Lösung ist besser lesbar.