我目前正在调查一个网站,并发现了一件奇怪的事情。如果我在开发者控制台中找到PNACL嵌入元素,并在Chrome开发者控制台中对其进行评估,则会记录 > anonymous()
,旁边有一个箭头,表明它是一个普通的HTML元素。但是,typeof temp1
(变量名称)返回function
,但调用它会抛出
Uncaught TypeError: temp1 is not a function
at <anonymous>:1:1
并且调用toString()
会返回"[object HTMLEmbedElement]"
。 > anonymous()
意味着什么,以及Javascript变量如何成为函数但不可调用?
MCVE:
FF
var el=document.createElement("embed"); //<embed>
typeof el;// "function"
el.toString(); //"[object HTMLEmbedElement]"
el(); // [Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: debugger eval code :: <TOP_LEVEL> :: line 1" data: no]
铬
var el=document.createElement("embed"); // anonymous()
typeof el;// "function"
el.toString(); //"[object HTMLEmbedElement]"
el(); //undefined
答案 0 :(得分:1)
这是known bug,我在一年前提交过。
受影响的元素:
- HTMLAllCollection
- NPObject(?)
- HTMLObjectElement
- HTMLEmbedElement
来自铬团队的回答:
外部用户没有抱怨它,所以我想要存档它。
该死的我&#34;外部用户&#34; ...
当前状态:已存档
原因:
这些元素具有[Call]
内部方法,因此根据EcmaScript,typeof
必须返回'function'
。 (这使得bug成为一个规范而不是实现一个......)