TypeError: Незаконне запрошення на console.log.apply


129

Якщо ви запускаєте це в хромованій консолі:

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

Chrome повертає помилку:

// TypeError: Illegal Invocation

Чому? (Тестовано на Chrome 15 через OSX)

Відповіді:


180

Він може не працювати у випадках, коли контекст виконання змінено з консолі на будь-який інший об'єкт:

Це очікується, оскільки console.info очікує, що його "це" посилання буде консольною, а не віконною.

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/isissue/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 () або застосовувати (). Крім того, використовуйте bind (), як вказував @JohnWilliams.
Алан CS

1
Це все ще застосовується до IE11 / Edge, коли DevTools F12 не відкрито.
Бенні Боттема
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.