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)

Jacksonkr
źródło

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

Pavel Podlipensky
źródło
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