Hallo
Könnt ihr mir sagen warum im folgenden Code "this.maxlable" undefinde ist? Und wie ich machen kann, dass sie nicht mehr undefind ist?
function Grafik( jsonData, width, height) { this.maxLabel = 150; this.init = function() { console.log( this.maxLabel); } }
Der Ausdruck this.maxLabel ergibt nicht undefined. Jedenfalls dann nicht, wenn du die Methode init auch tatsächlich als Methode auf dem Instanzobjekt aufrufst, auf dem du deine Eigenschaft maxLabel definiert hast.
function Constructor (value) {
'use strict';
this.key = value;
this.print = function ( ) {
console.log(this.key);
};
}
const instance = new Constructor('value');
// method call
instance.print( ); // value
Gewöhnliche Funktionen wie du sie hier verwendest binden in jedem Fall einen eigenen Kontext, wobei der Wert der Kontextvariable this erst beim Aufruf der Funktion ermittelt wird, und zwar abhängig davon, auf welche Weise die Funktion aufgerufen wird.
Bei einem Methodenaufruf, also einem Elementausdruck wie object.method plus Call-Operator, wird die Funktion automatisch im Kontext des Objektes aufgerufen, zu dem die Referenz vor dem Punkt aufgelöst wurde.
Wird die Funktion hingegen nicht als Methode aufgerufen sondern über einen normalen Funktionsaufruf, dann verweist this auf den Kontext der lexikalischen Umgebung in der die Funktion definiert wurde, was je nach Ausführungsmodus entweder das globale Objekt oder undefined ist.
Viele Grüße,
Orlok