/ / Generic Javascript Events - javascript, zdarzenia, wywołanie zwrotne

Ogólne zdarzenia JavaScript - javascript, zdarzenia, wywołanie zwrotne

W Javascript widzę, że już istnieje Event interfejs i dziecko wywołane CustomEvent. Zastanawiam się, czy są to dobre dopasowania dla typu c # event / delegate system. Chcę stworzyć sposób subskrybowania wydarzeń, ale utknąłem na tym, jak bezpiecznie zrezygnować z subskrypcji.

function MyClass(){
this.onDoCoolThing = null;
}

MyClass.prototype.doCoolThing = function(){
// do thing
if(this.onDoCoolThing !== null){
for(var i = 0; i < this.onDoCoolThing.length; i++){
if(this.onDoCoolThing[i] instanceof Function)
this.onDoCoolThing[i]();
}
}
}

Po pierwsze, w jaki sposób mogę subskrybować? Oto moje pomysły:

Metoda C #

var myClass = new MyClass();
myClass.onDoCoolThing += myCallbackFunction.bind(this, param1);
myClass.onDoCoolThing += myOtherCallbackFunction.bind(this, param1);

Styl tablicy Jeśli metoda C # nie jest możliwa:

myClass.onDoCoolThing.push(myCallBackFunction.bind(this, param1);

Nie wiem, jak mógłbym wypisać się z tych, jeśli powiedzmy, obiekt z wywołaniem zwrotnym został zniszczony. Czy będzie to GCed?

Dlatego zastanawiam się, czy ta praca została wykonana i znajduje się w rodzimym obiekcie, ale nie widzę jej nigdzie.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie ma sposobu, aby zrobić to czysto w waniliowym JS.

Jednak jQuery zapewnia metodę delegowania, więc Tymoże przypisać programy obsługi po załadowaniu DOM. Wystarczy pobrać bibliotekę jQuery. Możesz napisać funkcję ręcznie, aby zrobić to w Vanilla JS, ale jest znacznie łatwiej pozwolić jQuery obsłużyć to za ciebie.

http://api.jquery.com/delegate/