在 Javascript 中,我看到已经有一个 Event
接口(interface)和一个名为 CustomEvent
的子接口(interface)。我想知道这些是否适合 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 吗?
这就是为什么我想知道这项工作是否已经完成并在本地对象中找到,但我真的没有在任何地方看到它。
最佳答案
没有办法在 vanilla JS 中干净地做到这一点。
但是,jQuery 提供了一个委托(delegate)方法,因此您可以在 DOM 加载后分配处理程序。只需拉入 jQuery 库即可。你可以在 Vanilla JS 中手动编写一个函数来完成它,但让 jQuery 为你处理它要容易得多。
关于javascript - 通用 Javascript 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34137352/