问题描述
js深复制对象,遇到了函数,Error对象如何复深制?
问题出现的环境背景及自己尝试过哪些方法
可以实现普通对象和数组,正则的深复制,但是对于函数,Error对象无法复制,如何解决?
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
我的实现方法
你期待的结果是什么?实际看到的错误信息又是什么?
可以深复制函数,Error对象等
js深复制对象,遇到了函数,Error对象如何复深制?
可以实现普通对象和数组,正则的深复制,但是对于函数,Error对象无法复制,如何解决?
// 请把代码文本粘贴到下方(请勿用图片代替代码)
我的实现方法
可以深复制函数,Error对象等
new一个新的对象,适用于Date,RegExp,Error等不可变对象
switch(type){
case 'Date':
case 'RegExp':
case 'Error': value = new window[type](value); break;
}
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
复制函数似乎没有太大意义,JS 里函数的身份比较特殊,由于闭包的关系,每个函数在声明时处于独立的执行环境。所以你简单复制一个函数,比如
funcA = new Function(funcB.toString)
,无法进入原先的执行环境,运行结果肯定是不同的。Error 就是个普通对象,直接复制内容即可。