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)

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.