Utiliser ES6 / ES2015 et WebPack, j'essaie d'envelopper ma tête autour du petit monstre qui est le mot clé J'ai une classe Dans la plupart des cas, je pouvais simplement appeler La solution la plus facile serait de simplement appeler Je promets que j'ai vérifié les documents et autres threads sur Stackoverflow, mais personne que j'ai trouvé semble aborder ce problème particulier . p> et ici la classe d'édition est défini p> modifier code> contenant Une méthode statique
modification (événement) code> et dans cette méthode, j'essaie d'apporter un appel récursif à la méthode elle-même (en fonction d'une variable donnée). p>
this.change (événement) code> mais ici le mot clé ceci est déjà occupé par l'objet JQuery qui appelait le Fonction au lieu de la classe contenant. p>
edit.change (événement) code> à la place, mais il doit y avoir une solution plus propre. Chaque langage de programmation que j'ai rencontré jusqu'à présent a eu une certaine référence à sa classe contenant de la classe intégrée. P>
3 Réponses :
Les méthodes statiques fonctionnent sur la classe au lieu d'instances de la classe, elles sont appelées sur la classe. Il existe deux façons d'appeler des méthodes statiques: ou p> dans des méthodes statiques, ce mot-clé fait référence à la classe. Vous pouvez appeler une méthode statique d'une autre méthode statique dans la même classe avec ceci. P> p>
Non, cela ne fonctionne pas. Non seulement les champs de classe Syntaxe expérimentale, mais aussi ce code> se référerait à l'extérieur
Ceci code> (probablement le module) pas la classe code>.
La solution la plus simple serait de simplement appeler
edit.change (événement) code> à la place, mais il doit y avoir une solution plus propre p>
Non, c'est bien ce que vous devez utiliser pour toujours faire référence à la classe code> modifier code>. Il n'y a rien de désordre avec ça, il suffit d'l'utiliser. P>
Vous pouvez également utiliser
ceci.change (événement) code> si vous n'utilisez pas la méthode comme gestionnaire d'événements. Assurez-vous de l'appeler comme méthode: P>
$('table :input').change(thingsToAddToData, Edit.change.bind(Edit)); // or $('table :input').change(thingsToAddToData, e => Edit.change(e));
Merci pour vos conseils! Me donner les autres exemples de la façon dont je "pourrait" résoudre mon problème m'a donné une nouvelle perspective sur la façon de penser d'autres problèmes de mon code.
L'une des réponses de @bergi doit fonctionner (en utilisant Je suggérerais de tirer à nouveau la fusion de l'événement avec quelques modifications de paramètres ( http://api.jquerery.com/ déclencheur / ): p>
remplacer De cette façon, il n'est pas nécessaire d'appeler directement le gestionnaire directement, et vous n'avez pas besoin de modifier le contexte code> code>, conservant ainsi le code plus transparent. P> fonction.pototype.bind code> ou
() => {} code>). Cependant, je pense que votre problème est plus structurel. Puisque
edit.change code> est un gestionnaire d'événements qu'il n'a pas de sens de l'appeler directement, car il est censé être tiré à travers des événements. P>
edit.change (événement); code> avec
this.trigger (événement); code> p> p>
Si vous ne voulez pas que l'événement soit tiré deux fois, vous ne voulez pas de gestionnaire d'événements récursif. Vous voulez simplement diviser le comportement de vos manutentionnaires d'événement. Votre gestionnaire d'événements ne doit gérer que la logique des événements, et non le déclencheur de comportement réel de l'événement.
Je n'étais effectivement pas au courant de la distinction entre les gestionnaires d'événements et autres fonctions. Pour moi, une fonction disposée à prendre un objet événementiel était un candidat pour être un gestionnaire d'événements.
Bien que je suis hésitant à utiliser déclencheur () code> jusqu'à ce que j'ai bien compris le système d'événement et bouillonnez, je vais garder cela sur mon radar pour des situations similaires. Très bon conseil!
Est-ce votre code actuel? Si oui: vous ne devez pas utiliser
class code> ici. Il suffit de déclarer une fonction
normale code> et l'attribuez à
module.exports.changer code>.
" Chaque langage de programmation que j'ai rencontré jusqu'à présent a eu une certaine référence à sa classe contenant de la classe intégrée. I>" - Quelles langues de programmation pensez-vous?
@Bergi Peut-être que j'étais trop rapide pour extrapoler, mais mon expérience est avec principalement PHP ("Self"), Python ("Self") et Java ("this"). Je sais aussi Ruby pour avoir le mot-clé "Self".
@Bergi concernant simplement exporter la fonction unique: il existe d'autres fonctions statiques contenues dans la modification. J'ai essayé de travailler avec des cas de classes dans JS, mais j'ai rapidement perdu une trace de laquelle le module utilisait quel objet de modification. J'ai décidé qu'une approche fonctionnelle pseudo-noms est mieux adaptée à mon niveau actuel de compétence concernant JS. Ce code sera définitivement refacturé car ma compréhension augmente.
JavaScript a le
ce mot-clé CODE> - et c'est assez similaire à celui de Python
auto code> à l'égard que vous pouvez appeler la méthode sur le «mauvais» Soi si vous faites quelque chose de bizarre.
Et oui, il en va de même s'il existe plusieurs fonctions statiques dans la classe
code>. Exporter des fonctions individuelles , à l'aide d'un objet uni (ce qui pourrait être Le
module.exports code> objet
) - mais utilisez uniquement la syntaxe code> Classe code> si vous avez des méthodes constructrices et non statiques.