2017-11-10 4 views
0

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.

+0

'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 –

+0

sein, den Link, den du mir gegeben hast, benutzt npm. Wird der Code auf Computern ohne node.js ausgeführt? – skyline

Antwort

0

einfach,

document.addEventListener("keypress", function(event){ 
    console.log(event); 
    var keyName = event.key; 
}); 
+0

Dieser Typ von Schlüsselereignis ist ein DOM-Schlüsselereignis, das nur auf DOM-Elementen (Dokument, HTML-Tags, ect) funktioniert. Ich möchte Ereignislistener auf JavaScript-Objekte anwenden (Javer-Skriptklassen) Nicht-DOM-Elemente. – skyline

+0

Nicht Domelement? Welchen Kontext also? – pirs

+0

Ich sagte: "Ich versuche nach einer Möglichkeit zu suchen, Event-Listener auf ein reines JavaScript-Objekt zu setzen. Kein DOM-Objekt." Wie im obigen Code wäre dies das Klassenobjekt player. Dies ist ein benutzerdefiniertes Javascript-Objekt, kein Dom-Objekt. – skyline