在Javascript中,我看到已经有一个Event
界面和一个名为CustomEvent
的孩子。我想知道这些是否适合c#类型的event
/ delegate
系统。我想创建一种订阅活动的方式,但我一直在坚持如何优雅地取消订阅。
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);
我不知道如果取消订阅,我会如何取消订阅那些带回调的对象被销毁。它会被GC?
这就是为什么我想知道这项工作是否已经完成并且是在原生对象中找到的,但我在任何地方都没有看到它。
答案 0 :(得分:1)
在香草JS中没有办法干净利落。
但是,jQuery提供了一个委托方法,因此您可以在DOM加载后分配处理程序。只需拉入jQuery库。您可以在Vanilla JS中手动编写一个函数,但让jQuery为您处理它更容易。