如何在没有引用的情况下复制Javascript错误?
我想复制Javascript如何在没有引用的情况下复制Javascript错误?,javascript,object,clone,object-reference,Javascript,Object,Clone,Object Reference,我想复制JavascriptError,无需引用 例如: const error1 = new Error('error1'); const error2 = error1; error2.message = 'error2'; console.log(error1); console.log(error2); 输出: 错误:error2 在evalmachine克隆功能。但不幸的是,它返回的是一个对象,而不是一个错误实例。有没有一种方法可以让我在不引用的情况下复制错误,并在不更改堆栈或其
Error
,无需引用
例如:
const error1 = new Error('error1');
const error2 = error1;
error2.message = 'error2';
console.log(error1);
console.log(error2);
输出:
错误:error2
在evalmachine<代码>克隆
功能。但不幸的是,它返回的是一个对象,而不是一个错误实例。有没有一种方法可以让我在不引用的情况下复制错误
,并在不更改堆栈
或其他默认属性的情况下返回错误
的实例?如果您坚持要单独复制错误,我认为您最好的办法是创建一个新错误并复制您想要保留的属性:
function copyError(err, newMessage) {
var newErr = new Error(newMessage);
newErr.stack = err.stack;
// copy other properties
}
var newErr = copyError(e, "New message");
然而,我不认为这是一个很好的方法
另一个选项是执行与.NET类似的操作-创建新错误并将原始错误放置在该错误的属性上:
var newErr = new Error("New message");
newErr.innerError = originalError;
这里的缺点是,任何检查这些错误的操作都需要检查是否存在
.innerError
属性,并相应地使用它。您可以尝试手动输入一些重要属性:
const error1 = new Error('error1');
const error2 = new error1.constructor(error1.message);
if (error1.stack) {
error2.stack = error1.stack;
}
if (error1.code) {
error2.code = error1.code;
}
if (error1.errno) {
error2.errno = error1.errno;
}
if (error1.syscall) {
error2.syscall = error1.syscall;
}
error2.message = 'error2';
console.log(error1);
console.log(error2);
你想用这个来完成什么?我有几个函数在它们的参数中发送错误,我不想中断原始的
错误。因此,我想为每个函数复制一个错误。与winston中的格式类似。这是因为当您分配它时,您正在创建一个引用,请尝试只分配您感兴趣的成员,并用字符串()换行。但为什么任何处理程序都会变异错误对象?如果您向其记录器输入错误
,winston library会将信息
参数作为错误
的实例。我需要更改info
参数中的一些属性,因为winston将它们的消息存储在info[Symbol('message')]