簡體   English   中英

Function.prototype.apply不適用於Chrome中的Function.prototype.call

[英]Function.prototype.apply doesn't work on Function.prototype.call in Chrome

標題應該是自我解釋的,我想知道是否有解決方法。

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"]);

您收到錯誤是因為您沒有將參數傳遞給.apply Firefox拋出更合理的錯誤:

TypeError:Function.prototype.call在不兼容的undefined上調用

如果您實際傳遞應該調用的函數,它在兩個瀏覽器中都可以正常工作:

 Window.call.apply(function foo() { console.log('foo'); }); 


注意:如果您確實想要將Window函數應用於任意對象,這可能不起作用。 主機對象/功能通常更具限制性,尤其是涉及DOM時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM