TypeError: Doa Ilegal di console.log.apply


129

Jika Anda menjalankan ini di konsol chrome:

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

Chrome memberi Anda kesalahan:

// TypeError: Illegal Invocation

Mengapa? (Diuji pada Chrome 15 melalui OSX)

Jawaban:


180

Ini mungkin tidak berfungsi dalam kasus ketika konteks eksekusi berubah dari konsol ke objek lain:

Ini diharapkan karena console.info mengharapkan referensi "ini" sebagai konsol, bukan jendela.

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

Perilaku ini diharapkan.

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


25
Jika Anda perlu menggunakan fungsi, Anda dapat menggunakan console.info.bind (console)
John Williams

3
jadi bisakah Anda menggunakan console.info.call(console, "stuff")di semua browser yang mendukung ES5?
mucaho

2
Hal yang sama berlaku untuk:console.info.apply(console, arguments)
PeterM

Argumen yang sama berlaku untuk fungsi lain seperti console.log () dan document.writeln (). Jadi, selalu berikan konteks eksekusi yang benar jika menggunakan panggilan () atau apply (). Sebagai alternatif, gunakan bind () seperti yang ditunjukkan oleh @JohnWilliams.
Alan CS

1
Ini masih berlaku untuk IE11 / Edge ketika DevTools F12 tidak terbuka.
Benny Bottema
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.