keyword this in Verbindung mit new

MiMi

Erfahrenes Mitglied
Hi,

Hab mich schon durch ne menge Seiten gelesen um this zu verstehen. Jedoch habe ich kein Beispiel in diesem Zusammenhang mit new gefunden.
Und zwar habe ich folgenden Code
Code:
		this.combo = new Ext.form.ComboBox({
			fieldLabel: 'label',
			name: 'name',
			allowBlank: false,
			store: storeName,
			valueField: 'id',
			displayField: 'name',
			hiddenName: 'name',
			typeAhead: true,
			minChars: 3,
			mode: 'remote'
		});
lasse ich nun das this weg, bekomme ich in einer anderen Datei (diese wird glaub ich generiert) nen Fehler sobald ich diese aufrufe.
aus dem EXT lib.
Ich versteh aber absolut nicht warum? Kenne this sonst nur von Java, welches auf das aktuelle Objekt (die Klasse in der ich mich befinde) verweist.
 
this sollte auch in javascript das aktuelle Objekt sein. Allerdings vermute ich stark, dass hier this keine Eigenschaft bzw. Unterobjekt combo besitzt wodurch die Zuweisung bereits daran scheitert. Besser waere womoeglich ein global definiertes Objekt zu verwenden anstatt this.
 
Allerdings vermute ich stark, dass hier this keine Eigenschaft bzw. Unterobjekt combo besitzt wodurch die Zuweisung bereits daran scheitert.

Man kann jedem Objekt in JavaScript zu jeder Zeit neue Eigenschaften hinzufügen.

Besser waere womoeglich ein global definiertes Objekt zu verwenden anstatt this.

Genau das macht er ja, wenn er "this." vornedran weg lässt. Alles was kein "var" vornedran hat, ist eine globale Variable.


Wieso lässt du denn "this." überhaupt weg? Hier mal die Erklärung, woran es (vermutlich) liegt. Das basiert auf den paar Zeilen Code die du uns gezeigt hast.

Angenommen in der einen Datei sind folgende beiden Klassen definiert.
Javascript:
//Eine Klasse ComboBox, welche nur das Attribut "foo" besitzt 
function ComboBox(foo) {
	this.foo = foo;
}

//Eine Klasse "MyClass", welche als Attribut eine Instanz von ComboBox enthält
function MyClass() {
	this.cb = new ComboBox("Bla");
}

Und in der anderen Datei benutzt du diese folgendermaßen.
Javascript:
//Hier zeuge ich ein Objekt der Klasse "MyClass"
var my = new MyClass();

//greift auf das Datenelement "foo" des Datenelementes "cb" zu.
alert(my.cb.foo);

Das funktioniert alles wie es soll und gibt "Bla" aus.

Wenn du jetzt aber MyClass abänderst, so wie du es getan hast (this entfernen)
Javascript:
//Eine Klasse "MyClass", welche keine Attribute enthält.
//Es wird nur eine globale Variable "cb" erzeugt.
function MyClass() {
	cb = new ComboBox("Bla");
}

Jetzt kann der Aufruf von "alert(my.cb.foo);" nicht mehr funktionieren, es müsste "alert(cb.foo);" heißen.
 
Alles was kein "var" vornedran hat, ist eine globale Variable.
Wusst ich schonmal net, ok.

Hatte probiert das wegzulassen, weil ich diese an einer anderne Stelle genutzt hatte, und dort dann ein Fehler kam das er diese nicht kennt.

Geloest hab ich es jetzt wie folgt:
Code:
var combo = new ...
Da dies in der init steht
Code:
initCo: function() {
konnte ich von ausserhalb dieser initCo wohl nicht an diese variable ran, wenn ein this davor stand. Jetzt mit var davor komm ich ausserhalb mit
Code:
this.combo...
wohl an diese variable.

Danke jedenfalls, muss mich irgendwie erstma in JS und auch das ExT lib einfinden.
 

Neue Beiträge

Zurück