TypeError: Illegal Invocation na console.log.apply


129

Jeśli uruchomisz to w konsoli chrome:

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

Chrome zwraca błąd:

// TypeError: Illegal Invocation

Czemu? (Testowane w Chrome 15 przez OSX)

Odpowiedzi:


180

Może nie działać w przypadkach, gdy kontekst wykonania zmienił się z konsoli na inny obiekt:

Jest to oczekiwane, ponieważ console.info oczekuje, że jego odwołanie „this” będzie konsolą, a nie oknem.

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

Takie zachowanie jest oczekiwane.

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


25
Jeśli potrzebujesz użyć jako funkcji, możesz użyć console.info.bind (console)
John Williams,

3
więc czy możesz używać console.info.call(console, "stuff")we wszystkich przeglądarkach obsługujących ES5?
mucaho

2
To samo dotyczy zastosowania:console.info.apply(console, arguments)
PeterM

Ten sam argument dotyczy innych funkcji, takich jak console.log () i document.writeln (). Dlatego zawsze podawaj poprawny kontekst wykonania, jeśli używasz call () lub apply (). Alternatywnie, użyj bind (), jak wskazał @JohnWilliams.
Alan CS

1
Nadal ma to zastosowanie do IE11 / Edge, gdy narzędzia DevTools F12 nie są otwarte.
Benny Bottema
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.