【问题标题】:Calling navigator.javaEnabled() after assigning to a variable分配给变量后调用 navigator.javaEnabled()
【发布时间】:2016-06-21 09:59:29
【问题描述】:

我将 javaEnabled() 函数分配给这样的变量:

var je = navigator.javaEnabled;

现在,当我尝试使用 je(); 调用该函数时,它会在 chrome 中引发错误提示

VM960:1 Uncaught TypeError: Illegal invocation(…)

在 Firefox 中,错误是:

TypeError:在未实现接口 Navigator 的对象上调用了“javaEnabled”。

为什么会这样失败?

【问题讨论】:

  • je 有 javaEnabled 函数的参考。但它没有被正确的对象调用。您必须将其绑定到 navigator 对象,例如:let jeb = je.bind(navigator); 现在调用 jeb() 会产生正确的结果。

标签: javascript


【解决方案1】:

如果你调用类似obj.func() 的东西,func 将被调用,obj 作为它的this 值。 Firefox 抱怨 this 值不兼容。在您的情况下,它是null 或全局对象(通常是window),具体取决于上下文以及您是否use strictjavaEnabled 需要 navigator 对象,而 Object.valueOf() 需要 Object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多