TypeError: Invocazione illegale su console.log.apply


129

Se lo esegui nella console di Chrome:

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

Chrome ti restituisce un errore:

// TypeError: Illegal Invocation

Perché? (Testato su Chrome 15 tramite OSX)

Risposte:


180

Potrebbe non funzionare nei casi in cui il contesto di esecuzione è cambiato dalla console a qualsiasi altro oggetto:

Ciò è previsto perché console.info prevede che il suo riferimento "this" sia console, non finestra.

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

Questo comportamento è previsto.

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


25
Se è necessario utilizzare come funzione, è possibile utilizzare console.info.bind (console)
John Williams

3
quindi puoi usarlo console.info.call(console, "stuff")in tutti i browser che supportano ES5?
mucaho,

2
Lo stesso vale per:console.info.apply(console, arguments)
PeterM,

Lo stesso argomento si applica ad altre funzioni come console.log () e document.writeln (). Quindi, fornire sempre il contesto di esecuzione corretto se si utilizza call () o apply (). In alternativa, usa bind () come ha sottolineato @JohnWilliams.
Alan CS,

1
Ciò è ancora applicabile a IE11 / Edge quando DevTools F12 non è aperto.
Benny Bottema,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.