尝试将Object复制到变量但未能复制全部属性
解决Error对象属性复制不全的问题
你遇到的问题核心是:Error实例的message和stack属于不可枚举属性,而对象展开语法(...)、Object.assign()这类常规复制方式,默认只会复制对象的可枚举自有属性。你能成功复制的statusCode、operationalError、success是自定义的可枚举属性,所以能被正常复制,而message和stack则会被忽略。
下面是几种可行的解决方法:
手动显式复制不可枚举属性
直接把message和stack单独提取出来,配合常规复制方式:// 对象展开语法实现 const copiedErr = { ...err, message: err.message, stack: err.stack }; // 或者用Object.assign实现 const copiedErr = Object.assign({}, err); copiedErr.message = err.message; copiedErr.stack = err.stack;完整复刻Error实例(含原型链与所有属性)
如果需要保留原Error对象的原型链、类型特征以及所有属性(包括不可枚举的),可以通过属性描述符实现完整复制:const copiedErr = Object.create(Object.getPrototypeOf(err)); Object.defineProperties(copiedErr, Object.getOwnPropertyDescriptors(err));
内容的提问来源于stack exchange,提问作者Usama AHMED
相关产品推荐
相关产品推荐

