Если вы настаиваете на наличии отдельных копий ошибки, я думаю, что вам лучше всего создать новую ошибку и скопировать свойства, которые вы хотите сохранить:
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
и использовать его соответствующим образом.