Y a-t-il un moyen de faire une boucle sur les propriétés intégrées d'un objet Javascript? Je me rapproche de l'endroit où je veux aller, mais "A for ... in loop ne fait pas de itérations sur les propriétés intégrées."Liste des propriétés intégrées de l'objet
Répondre
Cela fonctionnera avec JSON. Il n'a pas été testé beaucoup:
<style>
.tree {
margin-left:5px;
}
</style>
<div id='out'></div>
<script type="text/javascript">
data = {"feep":{"bar":{"baz":"37628","quux":{"a":"179","b":"7"}},"foo":"1025"},"Bleh":"1234"}
$('out').innerHTML = renderJSON(data)
function renderJSON(obj) {
var keys = []
var retValue = ""
for (var key in obj) {
//$('out').innerHTML = $('out').innerHTML +"<br />" + key + ", " + obj[key]
if(typeof obj[key] == 'object') {
retValue += "<div class='tree'>" + key
retValue += renderJSON(obj[key])
retValue += "</div>"
}
else {
retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>"
}
keys.push(key)
}
return retValue
}
</script>
Quand vous dites « construit dans les propriétés », qui ensemble de propriétés vous parlez exactement?
De Douglas Crockford de 'JavaScript - The Good Parts':
dans la déclaration peut boucler sur tous des noms de propriété dans un objet. L'énumération comprendra tous les propriétés, y compris les fonctions et les propriétés prototype que vous pourriez ne pas être intéressé en sorte qu'il est nécessaire pour filtrer les valeurs que vous ne voulez pas . Les filtres les plus courants sont la méthode hasOwnProperty et utilisant typeof pour exclure les fonctions:
var name; for (name in another_stooge) { if (typeof another_stooge[name] !== 'function') { document.writeln(name + ': ' + another_stooge[name]); } }
Mon cas d'utilisation particulier énumère les méthodes intégrées pour Array.prototype. De la référence javascript core de MDC: "A for ... in loop ne parcourt pas les propriétés intégrées." Ce qu'une simple boucle sur Array.prototype confirme. –
La réponse est non. Vous ne pouvez pas énumérer les propriétés qui ne sont pas énumérables. Il y a cependant au moins deux façons de contourner cela. La première consiste à générer toutes les combinaisons possibles de caractères à utiliser comme noms de propriétés de test (pensez: a, b, c, ... aa, ab, ac, ad, ...). Étant donné que la communauté des standards est connue pour avoir proposé des noms de méthodes très longs (getElementsByTagNames, propertyIsEnumerable), cette méthode demandera de la patience. :-)
Une autre approche consiste à tester les propriétés natives connues à partir d'une liste prédéfinie.
Par exemple: Pour un array
vous tester pour toutes les propriétés indigènes connues de Function.prototype
:
prototype caller constructor length name apply call toSource toString valueOf toLocaleString
... et les choses héritées de Object.prototype
:
__defineGetter__ __defineSetter__ hasOwnProperty isPrototypeOf __lookupGetter__
__lookupSetter__ __noSuchMethod__ propertyIsEnumerable unwatch watch
... et les choses héritées à partir de Array
:
index input pop push reverse shift sort splice unshift concat join slice indexOf lastIndexOf
filter forEach every map some reduce reduceRight
..et enfin, et le cas échéant, chaque propriété dénombrable de l'objet que vous testez:
for (var property in myArrayObject) myPossibleProperties.push(property);
Vous serez alors en mesure de tester chacun de ceux pour voir si elles sont présentes sur l'instance d'objet.
Ceci ne révèlera pas les membres inconnus non énumérables (non documentés, ou définis par d'autres scripts), mais vous permettra de lister les propriétés natives disponibles. J'ai trouvé l'information sur les propriétés natives Array
sur Mozilla Developer Center et MSDN.
Non, vous ne pouvez pas lister les propriétés intégrées de l'objet. Mais vous pouvez vous référer à la référence de l'implémenteur. Par exemple, pour connaître toutes les méthodes et propriétés de l'objet Math implémenté sur Firefox, vous allez utiliser Javascript Math Référence Firefox: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math
Je me rends compte de cette question est de trois ans, mais maintenant, avec ES5, il est possible :
>>> Object.getOwnPropertyNames(Object)
["prototype", "getPrototypeOf", "getOwnPropertyDescriptor", "keys", "defineProperty", "defineProperties", "create", "getOwnPropertyNames", "isExtensible", "preventExtensions", "freeze", "isFrozen", "seal", "isSealed", "length", "arity", "name", "arguments", "caller"]
Pour clarifier un peu, Object.getOwnPropertyNames (Array) fournit les propriétés intégrées à Array. – forforf
- 1. Liste des variables intégrées MSBuild
- 2. JScript recenseur et la liste des propriétés
- 3. IIS 6.0 Liste des propriétés DirectoryEntry
- 4. lecture seule liste avec des propriétés automatiques
- 5. Conception de page Web avec des vidéos flash flv intégrées
- 6. MSBuild publier site avec des ressources intégrées
- 7. Méthodes intégrées de sauvegarde app.config
- 8. Utilisation des propriétés de liste déroulante dans C# NET 3.5
- 9. NVelocity - #parse avec ressources intégrées
- 10. App Engine Liste de propriétés Jruby DataMapper
- 11. Comment obtenir la liste des propriétés d'une classe?
- 12. Réinitialisation des propriétés d'une grille de propriétés
- 13. Extension de classes intégrées en python
- 14. Class design: liste indexée ou plusieurs propriétés?
- 15. Appel de méthodes natives Java intégrées
- 16. Comment afficher le code des fonctions intégrées dans MS Access?
- 17. Composant GUI de liste de propriétés dans Swing
- 18. Élégante façon de passer de la liste d'objets au dictionnaire avec deux des propriétés
- 19. Où puis-je obtenir une liste de toutes les propriétés disponibles dans le fichier de projet?
- 20. Propriété Visual Basic 6 par défaut pour les fonctions intégrées
- 21. Hériter des propriétés css
- 22. Accessibilité des propriétés abstraites
- 23. Réflexion - obtention des propriétés des objets imbriqués
- 24. liste blanche modèle de liaison ne semble pas fonctionner avec des propriétés complexes
- 25. Comment puis-je trier la liste <T> en fonction des propriétés de T?
- 26. Propriétés de liaison XAML
- 27. Comment utilisez-vous les polices intégrées de gnuplot?
- 28. Initialisation en classe de données statiques non-intégrées
- 29. Que se passe lorsque vous effectuez des tâches à des champs ou des propriétés des propriétés
- 30. Le framework .NET fournit-il des classes intégrées pour effectuer des calculs géométriques?
Pourriez-vous stringify votre objet à JSON et analyser le résultat? – starbeamrainbowlabs