JavaScript에서 bind ()를 사용하여 이벤트 리스너로 추가 된 함수를 제거하는 가장 좋은 방법은 무엇입니까?
예
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.myButton.addEventListener("click", this.clickListener.bind(this));
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", ___________);
};
})();
내가 생각할 수있는 유일한 방법은 bind로 추가 된 모든 리스너를 추적하는 것입니다.
이 방법으로 위의 예 :
(function(){
// constructor
MyClass = function() {
this.myButton = document.getElementById("myButtonID");
this.clickListenerBind = this.clickListener.bind(this);
this.myButton.addEventListener("click", this.clickListenerBind);
};
MyClass.prototype.clickListener = function(event) {
console.log(this); // must be MyClass
};
// public method
MyClass.prototype.disableButton = function() {
this.myButton.removeEventListener("click", this.clickListenerBind);
};
})();
더 좋은 방법이 있습니까?
bindAll
바인딩 방법을 단순화 하는 기능이 있습니다. 객체 이니셜 라이저 내에서 객체의 _.bindAll(this)
모든 메소드를 바인딩 된 버전으로 설정하기 만하면 됩니다. 또는 실수로 메모리 누수를 방지하기 위해 일부 방법 만 바인딩하려는 경우 인수로 제공 할 수 있습니다 _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
하고this.myButton.addEventListener("click", this.clickListener);