TypeError: console.log.apply üzerinde Yasadışı Çağrı


129

Bunu krom konsolda çalıştırırsanız:

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

Chrome size bir hata veriyor:

// TypeError: Illegal Invocation

Neden? (OSX aracılığıyla Chrome 15'te test edilmiştir)

Yanıtlar:


180

Yürütme bağlamının konsoldan başka bir nesneye değiştiği durumlarda çalışmayabilir:

Console.info "this" başvurusunun pencere değil konsol olmasını beklediği için bu beklenen bir durumdur.

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

Bu davranış bekleniyor.

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


25
Eğer bir fonksiyonu olarak kullanmak gerekiyorsa, console.info.bind (konsol) kullanabilir
John Williams

3
yani console.info.call(console, "stuff")ES5'i destekleyen tüm tarayıcılarda kullanabilir misiniz?
mucaho

2
Aynısı için de geçerli:console.info.apply(console, arguments)
PeterM

Aynı argüman, console.log () ve document.writeln () gibi diğer işlevler için de geçerlidir. Bu nedenle, call () veya apply () kullanıyorsanız her zaman doğru yürütme bağlamını sağlayın. Alternatif olarak, @JohnWilliams'ın belirttiği gibi bind () kullanın.
Alan CS

1
Bu, DevTools F12 açık olmadığında IE11 / Edge için hala geçerlidir.
Benny Bottema
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.