【问题标题】:How can a variable in Javascript be a function, but not be able to be called?Javascript中的变量怎么可能是一个函数,却不能被调用?
【发布时间】:2017-01-08 00:45:15
【问题描述】:

我目前正在调查一个网站,并发现了一件奇怪的事情。如果我在开发者控制台中找到一个 PNACL 嵌入元素,并在 Chrome 开发者控制台中对其进行评估,它会记录 > anonymous(),旁边有一个箭头,表明它是一个普通的 HTML 元素。但是,typeof temp1(变量名)返回function,但调用它会抛出

Uncaught TypeError: temp1 is not a function
    at <anonymous>:1:1

调用toString() 返回"[object HTMLEmbedElement]"&gt; 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

【问题讨论】:

  • 你能提供一些重现行为的代码吗?
  • 我认为该函数是对&lt;embed&gt; 集成的插件的引用。如果是这样,那么为了访问它,它可能就像一个 iframe 或者如果它是 flash 的话,可能是通过 actionscript ......?这是什么&lt;embed&gt;嵌入?
  • 好的,我刚刚阅读了有关 PNACL 的内容,并且那个未知函数必须是 C/C++,这当然是 JavaScript 调试器无法识别的,C/C++--已编译--Apples 然后是 JS/HTML--脚本和标记-Oranges

标签: javascript google-chrome google-nativeclient


【解决方案1】:

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

受影响的元素:

  • HTMLAllCollection
  • NPObject(?)
  • HTMLObjectElement
  • HTMLEmbedElement

铬团队的回答:

外部用户没有抱怨它,所以我正在考虑归档它。

该死的我是“外部用户”...

当前状态:已归档

原因:

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

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多