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)

Jacksonkr
la source

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

Pavel Podlipensky
la source
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