gpt4 book ai didi

javascript - 清理对象在构造函数中抛出错误

转载 作者:行者123 更新时间:2023-12-03 07:25:08 24 4
gpt4 key购买 nike

简化示例..

Javascript对象构造函数

var Foo = function() {
someEventEmitter.on("event", this.someHandler);
throw new Error("Unexpected error happening in a constructor");
}
// ...

var myObject;
try {
myObject = new Foo();
} catch(e) {

}

一些现实世界的情况与上面的例子类似。尝试构造一个对象,但构造函数(或可能是父构造函数)抛出错误。可能是编程操作抛出,或一些错误,如引用错误。

在引发异常之前,构造函数将设置监听器或其他数据。如何处理这个问题以避免内存泄漏和在失败的对象上发出事件?清理垃圾,删除添加的监听器等。

最佳答案

您需要在构造函数中处理它

  1. 理想情况下,通过执行所有可能在您可能需要清理的内容之前抛出的内容,这既美好又简单。

  2. 如果您做不到这一点,那么您需要在代码周围使用 try...catch 来进行清理。

#2 示例:

var Foo = function() {
var emitterHooked = false;
try {
someEventEmitter.on("event", this.someHandler);
emitterHooked = true;
throw new Error("Unexpected error happening in a constructor");
} catch (e) {
if (emitterHooked) {
try {
someEventEmitter.off("event", this.someHandler);
} catch (e2) { }
}
throw e;
}
};

当然,对于许多事件机制,您实际上并不需要 emitterHooked 变量,因为删除从未添加的变量是一项无操作,但这是为了强调这些事情遵循该方法时您需要处理。

正如你所看到的,这真的很难看,因此上面的#1。 :-)

关于javascript - 清理对象在构造函数中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36035343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com