JavaScript getter pour toutes les propriétés
Longue histoire courte: je suis dans une situation où je voudrais un PHP-style de lecture, mais en JavaScript.
Mon JavaScript est en cours d'exécution dans Firefox que, si Mozilla spécifiques JS est OK par moi.
La seule façon que je peux trouver à faire un JS de lecture nécessite de spécifier son nom, mais j'aimerais définir un getter pour tous noms possibles. Je ne sais pas si c'est possible, mais j'aimerais bien que savoir.
- j'imagine qu'il fait référence à l'fonctions magiques __get et __set
Vous devez vous connecter pour publier un commentaire.
Proxy
peut le faire! Je suis si heureux que cela existe!! Une réponse est donnée ici: Est-il un javascript équivalent de python __getattr__ méthode? . Pour reformuler dans mes propres mots:Proxy pour la victoire! Découvrez le MDN docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Fonctionne dans chrome, firefox, et node.js. Inconvénients: ne fonctionne pas dans IE - foutu IE. Bientôt.
myProxy.foo('bar')
.Le plus proche que vous pouvez trouver est __noSuchMethod__, qui est le JavaScript est l'équivalent de PHP __call().
Malheureusement, il n'y a pas d'équivalent de l' __get et__set, ce qui est dommage, parce qu'avec eux, nous pourrions avoir mis en œuvre __noSuchMethod__, mais je n'ai pas encore de voir une manière de mettre en œuvre des propriétés (en C#) à l'aide d' __noSuchMethod__.
__noSuchMethod__
.Si vous êtes le codage dans l'ES6, vous pouvez combiner proxy et la classe d'avoir un agréable à regarder code php de:
cette lie pour le gestionnaire, de sorte que vous pouvez l'utiliser au lieu de la cible.
Remarque: contrairement à PHP, proxy gère l'ensemble de la demande de propriété.
Vous pouvez vérifier les navigateurs prennent en charge proxy http://caniuse.com/#feat=proxy et de la classe http://caniuse.com/#feat=es6-class. Le nœud 8 support à la fois.
Javascript 1.5 n'ont getter/setter sucre syntaxique. C'est très bien expliqué par John Resig ici
Il n'est pas suffisamment générique pour l'utilisation du web, mais certainement Firefox a (également Rhino, si jamais vous voulez l'utiliser sur le côté serveur).
Si vous avez vraiment besoin d'une mise en œuvre qui fonctionne, vous pouvez "tricher" dans votre arround par le test de la deuxième paramètre
undefined
, ceci signifie également que vous pouvez utiliser pour obtenir réellement régler le paramètre.Si vous êtes à la recherche de quelque chose comme PHP
__get()
fonction, je ne pense pas que Javascript permet une telle construction.Du mieux que je peux penser de boucle par le biais de l'objet non-membres de fonction et ensuite, la création d'un correspondant "getXYZ()" fonction pour chaque.
Dans louches pseudo-ish code:
J'ai fini à l'aide d'un nickfs de réponse pour construire ma propre solution. Ma solution va automatiquement créer get_{propname} et set_{propname} fonctions pour toutes les propriétés. Il ne vérifie pas si la fonction existe déjà avant de les ajouter. Cela vous permet de remplacer la valeur par défaut d'obtenir ou de définir la méthode avec notre propre mise en œuvre, sans le risque de tomber écrasé.