在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