Ich möchte meine JavaScript-Objekt-Instanzen ihre eigenen Ereignisse behandeln. also habe ich es so strukturiert.Wie ein Keypress-Ereignissystem auf reinen JavaScript-Objekten (nicht DOM)
class Player{
constructor(length=2)
{
this.length=length;
this.plHead = new PlayerHead(5,5,"#AA0000");
this.plBody = new PlayerBody(this.plHead.posX,this.plHead.posY, this.length);
this.plDir = "xAx";
this.plSpeed =0.25;
this.addEventListener("keydown",this.KeyPush);
}
//TEMPDATA JUST TO TEST IF THE IDEAR WORKS
PlMove(dir=0)
{
switch(dir)
{
case 0:
this.plHead.posX = this.plHead.posX +this.plSpeed;
break;
case 1:
this.plHead.posY = this.plHead.posY -this.plSpeed;
break;
case 2:
this.plHead.posX = this.plHead.posX -this.plSpeed;
break;
case 3:
this.plHead.posY = this.plHead.posY +this.plSpeed;
break;
}
}
//Player keypress
KeyPush(evt)
{
switch(evt.keyCode)
{
case 37:
this.PlMove(2);
break;
case 38:
document.getElementById("scoreDiv").innerHTML = this.title;
break;
case 39:
this.PlMove(0);
break;
case 40:
this.PlMove(3);
break;
}
}
}
aber ich bekam Fehler sagen, dass this.PlMove keine Funktion ist. Dann nach weiteren Recherchen fand ich heraus, dass dies. bezieht sich auf das DOM-Dokument und nicht auf das JavaScript-Klassenobjekt, obwohl es in der Klasse enthalten ist.
So jetzt suche ich nach einer Möglichkeit, Ereignislistener auf ein reines JavaScript-Objekt zu setzen Nicht ein DOM-Objekt auch wenn ich meine eigenen Ereignisse alle erstellen muss, obwohl ich keine Ahnung habe, wie man das auch tut.
'addEventListener' ist für DOM-Objekte vorgesehen. Wenn Sie sich mit Events auf Plain-Objekten beschäftigen wollen, sollten Sie andere Event-Mechanismen wie https://www.npmjs.com/package/event-emitter in Betracht ziehen. Und diese Frage könnte ein Duplikat von https://stackoverflow.com/questions/20835768/addeventlistener-on-custom-object –
sein, den Link, den du mir gegeben hast, benutzt npm. Wird der Code auf Computern ohne node.js ausgeführt? – skyline