Can';t删除eventlisteners类型脚本/OOP JavaScript

Can';t删除eventlisteners类型脚本/OOP JavaScript,javascript,oop,drag-and-drop,typescript,Javascript,Oop,Drag And Drop,Typescript,onMouseUp已启动,但它不会删除EventListeners。我读过很多帖子,人们遇到了问题,这是因为他们没有删除他们添加的相同功能,阅读时我想我可能也有同样的问题,但我该如何处理呢?我不完全理解这个问题的答案 class DragAndDrop { item: Item; documentBody: HTMLBodyElement; constructor(documentBody: HTMLBodyElement, item: Item) { t

onMouseUp已启动,但它不会删除
EventListeners
。我读过很多帖子,人们遇到了问题,这是因为他们没有删除他们添加的相同功能,阅读时我想我可能也有同样的问题,但我该如何处理呢?我不完全理解这个问题的答案

class DragAndDrop {
    item: Item;
    documentBody: HTMLBodyElement;
    constructor(documentBody: HTMLBodyElement, item: Item) {
        this.documentBody = documentBody;
        this.item = item;
        this.documentBody.addEventListener("mousedown", this.onmousedown.bind(this));
    }
    onmousedown(event: MouseEvent): void {
        if (CollisionDetector.pointInRect(event.clientX, event.clientY, this.item)) {
            this.documentBody.addEventListener("mousemove", this.onMouseMove.bind(this));
            this.documentBody.addEventListener("mouseup", this.onMouseUp.bind(this));
        }
    }
    onMouseMove(event: MouseEvent): void {
        this.item.x = event.clientX;
        this.item.y = event.clientY;
    }
    onMouseUp(event: MouseEvent): void {
        this.documentBody.removeEventListener("mousemove", this.onMouseMove.bind(this));
        this.documentBody.removeEventListener("mouseup", this.onMouseUp.bind(this));
    }
}

在代码中使用
.bind

问题
  • .bind
    创建函数的副本
i、 e.
foo.bind!==foo

  • bind
    不是类型安全的:
解决方案 使用箭头功能。我为
mousedown
为您做这件事:

class DragAndDrop {
    item: Item;
    documentBody: HTMLBodyElement;
    constructor(documentBody: HTMLBodyElement, item: Item) {
        this.documentBody = documentBody;
        this.item = item;
        this.documentBody.addEventListener("mousedown", this.onmousedown);
    }
    onmousedown = (event: MouseEvent): void => {
        if (CollisionDetector.pointInRect(event.clientX, event.clientY, this.item)) {
            // Similarly ...
        }
    }
}
更多
有关箭头函数的更多信息:

在代码中使用
.bind

问题
  • .bind
    创建函数的副本
i、 e.
foo.bind!==foo

  • bind
    不是类型安全的:
解决方案 使用箭头功能。我为
mousedown
为您做这件事:

class DragAndDrop {
    item: Item;
    documentBody: HTMLBodyElement;
    constructor(documentBody: HTMLBodyElement, item: Item) {
        this.documentBody = documentBody;
        this.item = item;
        this.documentBody.addEventListener("mousedown", this.onmousedown);
    }
    onmousedown = (event: MouseEvent): void => {
        if (CollisionDetector.pointInRect(event.clientX, event.clientY, this.item)) {
            // Similarly ...
        }
    }
}
更多 有关箭头功能的更多信息: