有人知道如何对本机 javascript 事件对象进行深度复制/克隆吗?我知道我可以创建一个新的事件对象并手动设置适当的属性以匹配原始事件,但如果有一种方法只是克隆,它会容易得多。
原文由 paul smith 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人知道如何对本机 javascript 事件对象进行深度复制/克隆吗?我知道我可以创建一个新的事件对象并手动设置适当的属性以匹配原始事件,但如果有一种方法只是克隆,它会容易得多。
原文由 paul smith 发布,翻译遵循 CC BY-SA 4.0 许可协议
上面的代码不会正确复制任何 getter/setter。尝试:
function cloneEvent(e) {
if (e===undefined || e===null) return undefined;
function ClonedEvent() {};
let clone=new ClonedEvent();
for (let p in e) {
let d=Object.getOwnPropertyDescriptor(e, p);
if (d && (d.get || d.set)) Object.defineProperty(clone, p, d); else clone[p] = e[p];
}
Object.setPrototypeOf(clone, e);
return clone;
}
原文由 kofifus 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
出于您的目的,我只是将其作为新对象构造函数的原型并覆盖您想要更改的那些。由于循环引用问题,JS 中的克隆变得混乱,因此它可能不是您希望的快速而肮脏的解决方案。
在这种情况下,“克隆”对象是新对象的原型对象。 ‘这个。’在原型对象之前检查属性,因此这些属性将被覆盖。或者您可以在构建对象后附加属性。