JavaScript'te, olay dinleyicisi olarak eklenen bir işlevi bind () kullanarak kaldırmanın en iyi yolu nedir?
Misal
(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", ___________);
};
})();
Aklıma gelen tek yol bağlama ile eklenen her dinleyiciyi takip etmektir.
Bu yöntemle yukarıdaki örnek:
(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);
};
})();
Bunu yapmanın daha iyi yolları var mı?
bindAll
bağlama yöntemlerini basitleştiren bir işleve sahiptir. Nesne başlatıcısının içinde, nesnenizdeki _.bindAll(this)
her yöntemi bağlı bir sürüme ayarlamak için yapmanız yeterlidir. Alternatif olarak, yalnızca (I öneriyoruz yanlışlıkla bellek sızıntılarını önlemek için) bazı yöntemler bağlamak istiyorsanız, argüman olarak sağlayabilir: _.bindAll(this, "foo", "bar") // this.baz won't be bound
.
this.clickListener = this.clickListener.bind(this);
vethis.myButton.addEventListener("click", this.clickListener);