以下代码返回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);
那是为什么?
答案 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);