TypeError: Unzulässiger Aufruf von console.log.apply

129

Wenn Sie dies in der Chrome-Konsole ausführen:

console.log.apply(null, [array])

Chrome gibt Ihnen einen Fehler zurück:

// TypeError: Illegal Invocation

Warum? (Getestet auf Chrome 15 über OSX)

Jacksonkr
quelle

Antworten:

180

Es funktioniert möglicherweise nicht in Fällen, in denen der Ausführungskontext von der Konsole zu einem anderen Objekt geändert wurde:

Dies wird erwartet, da console.info erwartet, dass die Referenz "this" eine Konsole und kein Fenster ist.

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

Dieses Verhalten wird erwartet.

https://bugs.chromium.org/p/chromium/issues/detail?id=48662

Pavel Podlipensky
quelle
25
Wenn Sie als Funktion verwenden müssen, können Sie console.info.bind (Konsole)
John Williams
3
console.info.call(console, "stuff")Können Sie es also in allen Browsern verwenden, die ES5 unterstützen?
Mucaho
2
Gleiches gilt für:console.info.apply(console, arguments)
PeterM
Das gleiche Argument gilt für andere Funktionen wie console.log () und document.writeln (). Geben Sie daher immer den richtigen Ausführungskontext an, wenn Sie call () oder apply () verwenden. Verwenden Sie alternativ bind (), wie @JohnWilliams darauf hingewiesen hat.
Alan CS
1
Dies gilt weiterhin für IE11 / Edge, wenn die DevTools F12 nicht geöffnet sind.
Benny Bottema