node.js - 当复制节点js自定义错误类超级错误变量消失时
问题描述
我有一个从 Error 类扩展的自定义 Err 类。在我复制 Err 类的一个实例之前,一切都很好。复制实例的超级变量未定义!
这是我的代码:
class Err extends Error {
constructor(code, msg) {
super(msg);
this.code = code;
}
}
const error = new Err(404, 'error message');
console.log(error);
/* { Error: error message
at repl:1:15
at Script.runInThisContext (vm.js:122:20)
at REPLServer.defaultEval (repl.js:332:29)
at bound (domain.js:402:14)
at REPLServer.runBound [as eval] (domain.js:415:12)
at REPLServer.onLine (repl.js:642:10)
at REPLServer.emit (events.js:203:15)
at REPLServer.EventEmitter.emit (domain.js:448:20)
at REPLServer.Interface._onLine (readline.js:308:10)
at REPLServer.Interface._line (readline.js:656:8) code: 404 }
*/
const copy = { ...error };
console.log(copy);
// { code: 404 }
// where is error.stack and error.name?
解决方案:
将复制方法更改为此
const copy= { ...error };
copy.name = error.name;
copy.message = error.message;
copy.stack = error.stack;
坦克PA .
如果有人有更好的解决方案告诉我。
解决方案
和copy = { ...error };
(1){}
对象字面量运算符,创建一个新的 Object,而不是一个新的 Err 对象,
和
(2)...
或传播属性运算符,对于对象文字,只是将提供的对象自己的可枚举属性复制到您的新对象上。
要克隆任何具有属性、方法、getter/setter、不可枚举属性等的完美副本的 javascript 类实例,在通用代码中几乎是不可能的。您可以为您的特定情况创建自己的复制/克隆代码,结合Object.assign()
/Object.getPrototype()
和自定义调整继承的属性和内部类。
推荐阅读
- signalr - 带有 Angular 的 Azure Signalr 服务上下文
- stata - 日期格式为 %th 时的 xline 选项?
- java - 将对象元素转换为数组int [] java spring
- c++11 - 是否有可能在编译时与运行时有一个 for 循环,甚至在 c++11 中编译时间限制条件?
- powershell - Powershell Invoke-Webrequest“文件中没有文件部分”CURL到Powershell
- javascript - 如何将 jQuery 效果限制在特定页面部分内?
- php - 如何在php中将项目添加到多维数组?
- objective-c - 无法理解 Swift 中的某些运算符
- algorithm - 查找给定点积和另一个列表的列表的算法
- d3.js - Ajax 请求从 S3 签名 URL 返回 404