如何将Javascript中的变量作为函数,但不能被调用?

时间:2017-01-08 00:45:15

标签: javascript google-chrome google-nativeclient

我目前正在调查一个网站,并发现了一件奇怪的事情。如果我在开发者控制台中找到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

1 个答案:

答案 0 :(得分:1)

这是known bug,我在一年前提交过。

受影响的元素:

  
      
  • HTMLAllCollection
  •   
  • NPObject(?)
  •   
  • HTMLObjectElement
  •   
  • HTMLEmbedElement
  •   

来自铬团队的回答:

  

外部用户没有抱怨它,所以我想要存档它。

该死的我&#34;外部用户&#34; ...

当前状态:已存档

原因:

这些元素具有[Call]内部方法,因此根据EcmaScripttypeof必须返回'function'(这使得bug成为一个规范而不是实现一个......)