• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Variable einer Klasse in Listenerfunktion auslesen?

A

andreax

Guest
Hallo
Wie kann ich die unten beschriebene Klassen-Variable zahl in der Listener-Function erreichen den this zeigt in diesem Fall nur auf das geclickte Objeckt.
HTML:
<!DOCTYPE html>

<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="description" content=""/>
		<meta name="keywords" content=""/>
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
		<title>ES6 TEST</title>
		
		<style type="text/css">
	#test-b{
	width:100px;
	height:100px;
	border-radius:50%;
	background-color:#599;
	cursor:pointer;
	margin:auto;
	}
		</style>
	</head>
	<body>
	<div id="test-b" data-point="1"> </div>		
		
<script>
class ListenerTest
{
constructor()
{
this.ob = document.getElementById('test-b');
this.zahl = [1,2,3,4,5,6];
this.clicka = function(){console.log(this.dataset.point); console.log(this.zahl[4]);} 
//test1.html:32 Uncaught TypeError: Cannot read property '4' of undefined 
// zahl wird nicht gefunden weil this auf ob zeigt 

}
get setListener(){
this.ob.addEventListener('click',this.clicka,false);
console.log('setListenr',this.zahl[4]);//hier wird zahl gefunden weil this auf die Klasse zeigt.
}

}

var lisInst = new ListenerTest();
lisInst.setListener;
</script>
	</body>
</html>
Wenn ich innerhalb der Funktion clicka eine Instanz der Klasse erstelle und dann auf zahl verweise funktioniert der Aufruf.
aber ich kann die instanz nicht mehr entfernen und so befürchte ich daß der Arbeitsspeicher zugemüllt wird.

Danke für alle Infos Andreas
 
Zuletzt bearbeitet von einem Moderator:
du könntest eine arrow function (die ich aber sehr "hässlich" finde) als eventhandler übergeben und in dieser this.clicka() aufrufen
oder (das würde ich machen) this an den eventhandler (this.clicka) binden
 
Danke noch mal
Das klappt super mit bind
musste nur im Listener auf this.clicka.bind(this) ändern und dataset über e.target ansprechen

@mikeydoo Gelöst :)
 
Zurück
Oben