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


129

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

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

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

// TypeError: Illegal Invocation

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.