internet gratis google enable chrome activar javascript internet-explorer firefox google-chrome

javascript - gratis - ¿Por qué console.log.apply() lanza un error de Invocación ilegal?



enable javascript firefox (2)

Esta pregunta ya tiene una respuesta aquí:

Cuando ejecuto el siguiente código en Chrome 18 beta, aparece el siguiente error:

console.log.apply(this, [''message'']);

TypeError: invocación ilegal.

En Firefox 10 funciona como se esperaba.

En IE9 Object doesn''t support property or method ''apply'' el error: El Object doesn''t support property or method ''apply'' .

Supongo que esto tiene que ver con cómo el navegador ha implementado console.log .

¿Por qué funciona en Firefox pero no en Chrome e IE? Espero que alguien pueda arrojar algo de luz sobre la causa de esto y sus ramificaciones.

Aquí hay una muestra ejecutable en JS Bin.


Aquí hay una solución alternativa. No estoy seguro de que el caso donde no hay args funciona como se esperaba.

function logr(){ var i = -1, l = arguments.length, args = [], fn = ''console.log(args)''; while(++i<l){ args.push(''args[''+i+'']''); }; fn = new Function(''args'',fn.replace(/args/,args.join('',''))); fn(arguments); }; logr(1,2,3); logr(); logr({},this,''done'')


console y el log son objetos host. Su comportamiento depende de la implementación, y en gran medida no son necesarios para implementar la semántica de ECMAScript.

FWIW, tu jsBin también falla en Chrome a menos que lo cambies a ...

console.log.apply(console, [''message'']);

pero parece que ese log simplemente anticipa un contexto de llamada de console .