Est-il possible de remplacer JavaScript de la fonction toString() pour fournir une véritable sortie de débogage?
Quand je console.log()
un objet dans mon programme JavaScript, je viens de voir la sortie [object Object]
, ce qui n'est pas très utile pour comprendre ce que l'objet (ou le même type d'objet), il est.
En C# je suis habitué à la redéfinition de ToString()
pour être en mesure de personnaliser le débogueur représentation d'un objet. Est-il quelque chose de similaire, je peux le faire en JavaScript?
- Je trouve que la sortie est le moyen le plus fiable de vous dire ce qu'est une variable détient (ou au moins mieux que
typeof
).
Vous devez vous connecter pour publier un commentaire.
Vous pouvez remplacer
toString
en Javascript. Voir l'exemple:Voir cette discussion sur la façon de déterminer le type d'objet nom en JavaScript.
toString
propriété,Object.prototype.toString.call(f)
affichera toujours les[object Object]
.Première remplacer
toString
de votre objet ou le prototype:Ensuite de les convertir en chaîne de caractères pour voir la représentation de chaîne de l'objet:
Si vous n'aimez pas la saisie de texte supplémentaire, vous pouvez créer une fonction qui enregistre les représentations de chaîne de ses arguments à la console:
Utilisation:
Mise à jour
E2015 fournit beaucoup plus agréable syntaxe pour ce genre de choses, mais vous aurez à utiliser un transpiler comme Babel:
Un moyen facile d'obtenir debuggable de sortie dans le navigateur JS est de sérialiser l'objet JSON. Donc, vous pourriez faire un appel comme
Donc, pour un exemple,
alert("Blah! " + JSON.stringify({key: "value"}));
produit une alerte avec le texteBlah! {"key":"value"}
Si vous utilisez le Nœud, il pourrait être intéressant d'envisager
util.inspect
.Cela donnera:
Tandis que la version sans inspecter imprime:
Juste remplacer le
toString()
méthode.Exemple Simple:
Il fait encore mieux lors de la définition d'un nouveau type:
v0.10.*
ou ChromeVersion 32.0.1700.102
. Tout en appelant toString directement (lame) ou à l'aide de contrainte de type (lamer) sera de travailler avec cette console[/info|log/] utilise de vieux-pré-mod toString.Si l'objet est défini par vous-même, vous pouvez toujours ajouter un toString remplacer.
JS:
Avec modèle de littéraux:
Le Chrome journal de la console vous permet d'inspecter l'objet.
console.log("this is my object:", obj)
.-Cette opération prend beaucoup de temps pour
complet, et son utilisation est déconseillée selon mozilla docs:
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/proto
-Apparemment, les navigateurs obsolètes .prototype et ECMA6 spécifie
en utilisant la bonne__proto__ à la place.
Ainsi, par exemple, si vous définissez vous propre objet géoposition vous devriez appeler __proto__ de la propriété au lieu de .prototype:
Voici un exemple comment stringify une Carte objet:
Vous pouvez donner tous les objets de leurs propres méthodes toString, ou écrire une générale, que vous pouvez appeler sur l'objet que vous cherchez à-
Lieu de les ignorer
toString()
, si vous incluez le Prototype De La Bibliothèque JavaScript, vous pouvez utiliserObject.inspect()
pour obtenir un beaucoup plus utile de la représentation.Cadres les plus populaires comprennent quelque chose de similaire.
Vous pouvez étendre ou de remplacer dans le JS
JS: