Hallo af2111,
das ist nicht gut. Du möchtest das Alter des Studenten ändern. Aber dein Timer ändert nur noch eine lokale Variable.
Korrekt ist, das this-Problem zu lösen. Wie schon erklärt, wird this bei einem Funktionsaufruf an den Aufrufkontext gebunden. Bei einem Methodenaufruf ist das das Objekt, bei einem Funktionsaufruf aus settimeout ist das - im strict mode - null. Um das zu umgehen, hast Du zwei Möglichkeiten.
(1) Prä-ECMAScript 2015: Du erstellst eine Variable, der Du this zuweist. So eine Variable nennt man gerne self
oder that
. Im settimeout callback verwendest Du dann self bzw. that.
(2) ECMAScript 2015 Lösung: Du verwendest eine Arrow-Funktion. Arrow-Funktionen unterscheiden sich von normalen Funktionen dadurch, dass sie this
nicht binden, d.h. innerhalb der Arrow-Funktion hast Du das gleiche this
zur Verfügung wie außerhalb. Arrow-Funktionen wurden genau wie let mit ECMAScript 2015 eingeführt. Du nutzt let, also kannst Du auch Arrow-Funktionen nutzen. Der Unterschied in der Syntax ist minimal:
altern: function () {
let erstsemesterAlter = this.alter;
setInterval(() => {
this.alter = this.alter + 1;
if (this.alter - erstsemesterAlter == 8) {
alert("Doktor in " + this.Fach + "!!!");
}
}, 1000);
}
Rolf
sumpsi - posui - clusi