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)

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.