标题应该是自我解释的,我想知道是否有解决方法。
Window.call.apply;
>> function apply()
Window.call.apply();
>> Uncaught TypeError: Window.call.apply is not a function
at <anonymous>:2:13
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
基本上,我很惊讶apply
适用于除了一个以外的所有功能。
我正在编写一些需要调用本机javascript函数的更高级别的VM(遗憾的是,Function.prototype.call
就是其中之一),所以我需要函数apply
才能传递我的上下文和参数数组。
更新
看来这只是一些奇怪的错误信息。
当我希望能够调用具有可变数量的参数的构造函数并显式传递this
时,我发现了这一点,这是一个对象而不是预期的函数。
也许下面是一个更现实的例子:
function Fruit(name) {
this.name = name;
}
var x = {};
Fruit.call(x, "Apple");
// I thought this would also work, but it throws above error message
(Fruit.call).apply(x, ["Apple"]);
// Should instead use the constructor directly
Fruit.apply(x, ["Apple"]);
// or
(Fruit.call).apply(someFunction, [x, "Apple"]);
答案 0 :(得分:2)
您收到错误是因为您没有将参数传递给.apply
。 Firefox抛出了更合理的错误:
TypeError:在不兼容的未定义
上调用Function.prototype.call
如果您实际传递了应该调用的函数,它在两种浏览器中都可以正常工作:
Window.call.apply(function foo() { console.log('foo'); });
注意:如果您确实希望将Window
函数应用于任意对象,则这可能不起作用。主机对象/功能通常更具限制性,尤其是涉及DOM时。