Rolf B: Problem mit NaN

Beitrag lesen

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