Supposons que je veux inclure certains appels d' console.log
pour certains la production légitime raison, dire quelque chose comme une unité harnais de test. Évidemment, je ne voudrais pas que cela jeter un prématuré exception, si le navigateur ne prend pas en avoir un console
, ou si aucune console n'est présent.
Quelle est la meilleure façon de créer une simple log
fonction pour faire des logs de la console, ou en silence échoue sans erreur si aucune console n'est présent?
La accepté de répondre à la question ci-dessus:
var log = Function.prototype.bind.call(console.log, console); log.apply(console, ["this", "is", "a", "test"]);
Cela peut - log
fonction sera appelée normalement sur IE, et l'utilisation de l' apply
ici c'est juste pour montrer que c'est possible? Et, je suppose que de la liés question que ce sera un échec si IE console est fermée lorsqu'il s'exécute, alors log
ne fonctionne pas même après que la console s'ouvre, correct? Si c'est faux, quelqu'un peut m'expliquer comment ça fonctionne?
Cette ycombinator article semble pertinent. Sont-ils parlent de la même IE comportement à la question ci-dessus?
Function.prototype.apply.apply(console.log, [console, arguments]);
Fonctionne à la fois sur IE9 cassé la console.le journal et régulier de la console.journal à partir d'autres fournisseurs. Même hack comme à l'aide du Tableau.le prototype.tranche de convertir des arguments dans un vrai tableau.
Cela fonctionne très bien dans ma console chromée.
function echo(){
Function.prototype.apply.apply(console.log, [console, arguments]);
}
Simplifié:
function echo(){
Function.apply.call(console.log, console, arguments);
}
Ajouter une case et de retour:
function echo(){
return window.console && console.log &&
Function.apply.call(console.log, console, arguments);
}
L'exemple ci-dessus semble suffisant pour moi. Je n'ai pas IE sous la main pour tester, si. Est-ce une approche raisonnable pour transporter en toute sécurité habillage console.log
?
Plus de questions
En suivant le lien de la valeur liquidative de la réponse ci-dessous, nous voyons le code:
Function.prototype.call.call(console.log, console,
Array.prototype.slice.call(arguments));
Quel est le but de la convertir arguments
d'un tableau dans ce cas? Je suppose qu'il doit échouer dans certains navigateur, si vous ne le faites pas? Et, à l'opéra le comportement bizarre et console-moins navigateurs de côté, ne devrait-il pas quelque chose comme ce joli beaucoup de travail pour tout autre navigateur? Et n' prototype
servir un but dans les exemples ci-dessus, ou sommes-nous juste d'être pointilleux... Function.call.call
ou Object.call.call
ou isNaN.call.call
semblent fonctionner aussi bien qu' Function.prototype.call.call
.