TypeError: Invocation illégale sur console.log.apply


129

Si vous exécutez ceci dans la console Chrome:

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

Chrome vous renvoie une erreur:

// TypeError: Illegal Invocation

Pourquoi? (Testé sur Chrome 15 via OSX)

Réponses:


180

Cela peut ne pas fonctionner dans les cas où le contexte d'exécution est passé de la console à tout autre objet:

Ceci est attendu car console.info s'attend à ce que sa référence «this» soit console, pas window.

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

Ce comportement est attendu.

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


25
Si vous avez besoin d'utiliser en tant que fonction, vous pouvez utiliser console.info.bind (console)
John Williams

3
alors pouvez-vous utiliser console.info.call(console, "stuff")dans tous les navigateurs prenant en charge ES5?
mucaho

2
Il en va de même pour appliquer:console.info.apply(console, arguments)
PeterM

Le même argument s'applique à d'autres fonctions telles que console.log () et document.writeln (). Donc, fournissez toujours le bon contexte d'exécution si vous utilisez call () ou apply (). Sinon, utilisez bind () comme @JohnWilliams l'a souligné.
Alan CS

1
Ceci est toujours applicable à IE11 / Edge lorsque les DevTools F12 ne sont pas ouverts.
Benny Bottema
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.