TypeError: Invocación ilegal en console.log.apply

129

Si ejecuta esto en la consola de Chrome:

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

Chrome te devuelve un error:

// TypeError: Illegal Invocation

¿Por qué? (Probado en Chrome 15 a través de OSX)

Jacksonkr
fuente

Respuestas:

180

Es posible que no funcione en los casos en que el contexto de ejecución cambió de la consola a cualquier otro objeto:

Esto se espera porque console.info espera que su referencia "this" sea consola, no ventana.

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

Se espera este comportamiento.

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

Pavel Podlipensky
fuente
25
Si necesita usarlo como una función, puede usar console.info.bind (consola)
John Williams
3
Entonces, ¿se puede usar console.info.call(console, "stuff")en todos los navegadores compatibles con ES5?
mucaho
2
Lo mismo aplica para:console.info.apply(console, arguments)
PeterM
El mismo argumento se aplica a otras funciones como console.log () y document.writeln (). Por lo tanto, siempre proporcione el contexto de ejecución correcto si usa call () o apply (). Alternativamente, use bind () como @JohnWilliams ha señalado.
Alan CS
1
Esto todavía es aplicable a IE11 / Edge cuando las DevTools F12 no están abiertas.
Benny Bottema