Wie funktioniert dieses Schlüsselwort in einer Funktion?

Ich bin gerade auf eine interessante Situation in JavaScript gestoßen. Ich habe eine Klasse mit einer Methode, die mehrere Objekte mit Objekt-Literal-Notation definiert. Innerhalb dieser Objekte, diethis Zeiger wird verwendet. Aus dem Verhalten des Programms habe ich abgeleitet, dass diethis Der Zeiger bezieht sich auf die Klasse, für die die Methode aufgerufen wurde, und nicht auf das Objekt, das vom Literal erstellt wird.

Dies scheint willkürlich, obwohl ich davon ausgehen würde, dass es funktioniert. Ist das definiertes Verhalten? Ist es browserübergreifend sicher? Gibt es Gründe, warum es so ist, wie es jenseits der "Spezifikation sagt" (ist es zum Beispiel eine Folge einer allgemeineren Designentscheidung / -philosophie)? Reduziertes Codebeispiel:

// inside class definition, itself an object literal, we have this function:
onRender: function() {

    this.menuItems = this.menuItems.concat([
        {
            text: 'Group by Module',
            rptletdiv: this
        },
        {
            text: 'Group by Status',
            rptletdiv: this
        }]);
    // etc
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage