Lorsque j'exécute le code suivant dans Chrome 18 beta, j'obtiens l'erreur:
console.log.apply(this, ['message']);
TypeError: invocation illégale.
Dans Firefox 10, cela fonctionne comme prévu.
Dans IE9, j'obtiens l'erreur: Object doesn't support property or method 'apply'
.
Je suppose que cela a à voir avec la façon dont le navigateur a mis en œuvre console.log
.
Pourquoi cela fonctionne-t-il dans Firefox mais pas dans Chrome et IE? J'espère que quelqu'un pourra faire la lumière sur la cause de cela et ses ramifications.
Voici n exemple exécutable sur JS Bin.
console
et log
sont des objets Host. Leur comportement dépend de l'implémentation et, dans une large mesure, ils ne sont pas requis pour implémenter la sémantique d'ECMAScript.
FWIW, votre jsBin échoue également dans Chrome sauf si vous le changez en ...
console.log.apply(console, ['message']);
mais cela semble être que log
anticipe simplement un contexte d'appel de console
.
Voici une solution alternative. Je ne suis pas sûr que le cas où il n'y a pas d'arguments fonctionne comme prévu.
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')