TypeError: незаконный вызов на console.log.apply

129

Если вы запустите это в консоли Chrome:

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

Chrome возвращает вам ошибку:

// TypeError: Illegal Invocation

Зачем? (Проверено в Chrome 15 через OSX)

Jacksonkr
источник

Ответы:

180

Это может не сработать, если контекст выполнения изменился с консоли на любой другой объект:

Это ожидается, потому что console.info ожидает, что его ссылка «this» будет консолью, а не окном.

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

Это ожидаемое поведение.

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

Павел Подлипенский
источник
25
Если вам нужно использовать как функцию, вы можете использовать console.info.bind (console)
Джон Уильямс
3
так можно ли использовать console.info.call(console, "stuff")во всех браузерах, поддерживающих ES5?
mucaho
2
То же самое касается заявки:console.info.apply(console, arguments)
PeterM
Тот же аргумент применяется к другим функциям, таким как console.log () и document.writeln (). Итак, всегда предоставляйте правильный контекст выполнения при использовании call () или apply (). В качестве альтернативы используйте bind (), как указал @JohnWilliams.
Alan CS
1
Это все еще применимо к IE11 / Edge, когда DevTools F12 не открыт.
Benny Bottema