Instanceof在iframe中失败

时间:2018-09-07 12:07:00

标签: javascript iframe instanceof

以下代码返回true

console.log(document.createElement('script') instanceof Element);


<iframe>上下文中执行相同操作将返回false

let iframe = document.querySelector('iframe');
iframe = iframe.contentDocument || iframe.contentWindow.document;

console.log(iframe.createElement('script') instanceof Element);

Demo

那是为什么?

1 个答案:

答案 0 :(得分:4)

这是因为:

1)Element实际上是window.Element

2)在JS中,没有“类”之类的东西。一切(几乎)都是对象。因此instanceof会检查原型血统。当您问is some DOM node instanceof Element时,您可以将其翻译为someDOMNode.prototype === Element

3)window.Element !== document.querySelector('iframe').contentWindow.Element !!!

这将按预期记录true

console.log(iframe.createElement('script') instanceof  document.querySelector('iframe').contentWindow.Element);