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)

Jacksonkr
sumber

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

Pavel Podlipensky
sumber
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