TypeError: Invocação ilegal no console.log.apply

129

Se você executar isso no console do chrome:

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

O Chrome devolve um erro:

// TypeError: Illegal Invocation

Por quê? (Testado no Chrome 15 via OSX)

Jacksonkr
fonte

Respostas:

180

Pode não funcionar nos casos em que o contexto de execução foi alterado do console para qualquer outro objeto:

Isso é esperado porque console.info espera que sua referência "this" seja console, não janela.

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

Esse comportamento é esperado.

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

Pavel Podlipensky
fonte
25
Se você precisa usar como uma função, você pode usar console.info.bind (console)
John Williams
3
então você pode usar console.info.call(console, "stuff")em todos os navegadores que suportam o ES5?
Mucaho 22/07/2015
2
O mesmo vale para se aplicar:console.info.apply(console, arguments)
PeterM
O mesmo argumento se aplica a outras funções, como console.log () e document.writeln (). Portanto, sempre forneça o contexto de execução correto se estiver usando call () ou apply (). Como alternativa, use bind () como @JohnWilliams apontou.
27617 Alan CS
1
Isso ainda é aplicável ao IE11 / Edge quando o DevTools F12 não estiver aberto.
Benny Bottema