Node 上的 Object.defineProperty 被覆盖后如何恢复到原始状态?

How do I revert Object.defineProperty on Node to the original state after it was overridden?

在我的 javascript(在浏览器中 运行)代码中,第 3 方库已覆盖 Node.childNodes getter/setter.

举个例子,假设我自己用下面的代码完成了:

  Object.defineProperty(Node.prototype, 'childNodes', {

     get() {
      return "overridden!"
     },
     set(value) {
      //
     }

});

现在我想 select 一个元素并获取它的子节点。 (document.querySelector('body').childNodes)

如果我有一个新创建的 iframe,我可以将它用于 select 主 window 中的节点元素吗?

我的目标是在这个 属性 (Node.prototype.childNodes) 已经被覆盖后能够获取元素上的子节点。

备注

我意识到拥有覆盖 DOM 元素函数的第 3 方库是不好的。但这是我要解决的给定情况。

如果你有一个完整的 iframe Node.prototype.childNodes,你应该可以做到

Object.defineProperty(Node.prototype, "childNodes", 
  Object.getOwnPropertyDescriptor(iframe.contentWindow.Node.prototype, "childNodes")
);

恢复主 window 中的 getter/setter。之后,document.body.childNodes 应该又能正常工作了。