2017-11-10 15 views
0

JavaScript 객체 인스턴스가 자체 이벤트를 처리하도록하고 싶습니다. 그래서 저는 이것을 이렇게 구성했습니다.순수 JavaScript 객체 (DOM이 아닌 객체)에서 Keypress 이벤트 시스템을 수행하는 방법

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; 
    } 
} 
} 

그러나 this.PlMove가 함수가 아니라는 오류가 표시되었습니다. 다음 추가 연구 후이 사실을 알게되었습니다. 자바 스크립트 클래스 객체가 아니라 DOM 문서를 참조하고 있었다.

이제는 이벤트 리스너를 순수 JavaScript 객체에 배치하는 방법을 찾으려고합니다. 비록 내 자신의 이벤트를 모두 작성해야만하지만 그 중 하나를 수행하는 방법도 없습니다.

+0

는'addEventListener'는 DOM 객체를위한 것입니다. Plain 객체의 이벤트를 처리하려면 https://www.npmjs.com/package/event-emitter와 같은 다른 이벤트 메커니즘을 고려해야합니다. 이 질문은 https://stackoverflow.com/questions/20835768/addeventlistener-on-custom-object –

+0

의 링크 일 수도 있습니다. 귀하가 저에게 준 링크는 npm을 사용합니다. node.js가없는 컴퓨터에서 코드가 실행됩니까? – skyline

답변

0

단순히

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

해당 키 이벤트의 유형은 DOM 요소 (문서, HTML 태그 등)에서만 작동하는 DOM 키 이벤트입니다. DOM 요소가 아닌 JavaScript 객체 (javer 스크립트 클래스)에 이벤트 리스터를 적용하려고합니다. – skyline

+0

Dom 요소가 아닙니까? 그 맥락 때문에? – pirs

+0

"이벤트 리스너를 순수 JavaScript 객체가 아닌 DOM 객체에 배치하는 방법을 찾으려고합니다."그래서 위 코드의 컨텍스트 에서처럼 player라는 클래스 객체가됩니다. 이 객체는 dom 객체가 아닌 사용자 정의 javascript 객체입니다. – skyline