누락 된 부분을 이해하지 못했습니다. 이 일하지 않는 동안Typescript 정의되지 않은 'addEventListener'속성을 읽을 수 없습니다.
Uncaught TypeError: Cannot read property 'addEventListener' of undefined"
class Editor{
public context: CanvasRenderingContext2D;
constructor(public canvas: HTMLCanvasElement){
this.context = this.canvas.getContext("2d");
this.canvas.addEventListener("mousedown", this.handleMouseDown);
}
handleMouseDown(ev: MouseEvent){
this.canvas.addEventListener("mousemove", this.handleMouseMove);
//this.handleMouseMove(ev);
}
handleMouseMove(ev: MouseEvent){
console.log(ev);
console.log(ev.target);
}
}
//==============================================================================
//declare variables.
let mapEditor = new Editor(<HTMLCanvasElement>document.getElementById("map-editor"));
: 다음 코드는이 오류를 반환
let cnv = document.getElementById("map-editor") as HTMLCanvasElement;
cnv.addEventListener("mousedown", handleMouseDown);
function handleMouseDown(ev: MouseEvent){
ev.target.addEventListener("mousemove", handleMouseMove);
handleMouseMove(ev);
};
function handleMouseMove(ev: MouseEvent){
console.log(ev);
console.log(ev.target);
};
나는 주위를 둘러 및 순서를 조금 변경하려했지만 그럴 수 없어 그 사건을 해고 시켜라. 아마도 언어의 중요한 요소가 누락 되었습니까?
편집 : 나는 MouseDown 이벤트가 트리거 될 때, 상황이 변경 따라서 "이"키워드가 더 이상 클래스의 인스턴스를 참조 없다고 생각합니다. 그러므로 this.canvas는 정의되지 않았습니다. 나는 methode와 이벤트를 묶는 방식을 바꾸려고 노력할 것이다.
는 여기에 대한 설명을 발견 : 'this'-in-TypeScript
상황이 바뀌면서 바른 길을 걷고 있습니다. 지방 화살표 구문을 사용하여 'this'를 어휘 적으로 바인딩 할 수 있습니다. – Alex
감사합니다. 나는 당신의 제안 덕분에 굵은 화살표로 해결책을 찾았습니다. 나는 아직도이 원리들과 바인딩들을 이해하기가 힘들지만, 나는 여기서 얻고있다. –