gpt4 book ai didi

node.js - 仅覆盖 Node 中类的构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:23 28 4
gpt4 key购买 nike

我想覆盖默认的错误类,而不必为其创建自定义名称。但这也应该适用于任何其他类。

我尝试像这样解决这个问题:

var oldError = Error;
Error = function(msg, foo, bar){
let err = oldError(msg);
err.foo = foo;
err.bar = bar;
return err;
}
//new Error('error', 'lorem', 'ipsum'); -> now works
//foo and bar are totally optional. This way it sohuldn't break anything
//new Error(msg) -> still works

这样做会覆盖所有 Error 方法。

我无法调用 Error.captureStackTrace 或任何其他函数。

我必须调用 oldError.captureStackTrace

有没有办法只重写类的构造函数而不重写其他任何东西?

最佳答案

如果没有充分的理由, native 对象永远不应该被修补 - 即使这样,它们也可能不应该。

由于预计只有您会像这样使用 Error,因此扩展错误不会因作为全局 Error 可用而受益。它应该被扩展:

class CustomError extends Error {
constructor(msg, foo, bar) {
super(msg);
this.foo = foo;
this.bar = bar;
}
}

修补错误可能会破坏依赖于 Error 是 native 类的第三方代码。最明显的情况是 native 对象修补得太晚:

// third-party code that runs before patching
let err = new Error();
...
// patching
global.Error = class Error extends global.Error {...};
...
// third-party code that runs after patching
if (err instanceof Error) { /* the condition was expected to be true but it's not */ }

关于node.js - 仅覆盖 Node 中类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305352/

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