В Javascript я вижу, что есть уже интерфейс Event
и ребенок с именем CustomEvent
. Мне интересно, хороши ли они для типа C# event
/delegate
. Я хочу создать способ подписки на события, но я зациклился на том, чтобы отменить подписку изящно.Общие события Javascript
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]();
}
}
}
Во-первых, как я могу подписаться? Это мои идеи:
C# Метод
var myClass = new MyClass();
myClass.onDoCoolThing += myCallbackFunction.bind(this, param1);
myClass.onDoCoolThing += myOtherCallbackFunction.bind(this, param1);
стиль Массив Если C# метод не представляется возможным:
myClass.onDoCoolThing.push(myCallBackFunction.bind(this, param1);
Я не знаю, как бы я отказаться от те, если позволяют, объект с обратным вызовом был уничтожен. Будет ли это GCed?
Вот почему мне интересно, была ли эта работа выполнена и найдена в нативном объекте, но я ее вообще не вижу.
Я неясно, что вы просите .. вы просто хотите, чтобы связать/отвязать функцию событий? Или есть больше, чем это. – acupajoe
Начать с [этой статьи] (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events) – hindmost
@acupajoe Я пытаюсь воссоздать события C# (Java, вероятно, имеет то же самое) , Я хочу, чтобы подписаться на события объектов и отказаться от подписки. Я должен иметь возможность контролировать, когда эти события запускаются (т. Е. В пределах области функции) – BarryBones41