12
votes

"Ce" mot-clé en méthodes d'événement lors de l'utilisation de prototype JavaScript

J'essaie d'accéder aux variables de membre d'une classe de prototypes dans JavaScript dans un gestionnaire d'événements - quelque chose que j'utilise généralement le mot-clé "ou" Copie de cette "[copie] dans le cas de manutentionnaires d'événement). Inutile de dire que je rencontre des ennuis.

prendre, par exemple, cet extrait HTML: p> xxx pré>

et ce code JavaScript: p>

var that = this;


5 commentaires

Vous parlez-vous à la bibliothèque de prototypes ou à des classes prototypiques JavaScript plutôt droites?


Répondre trois ans de retard :) Mais pour la postérité: je parlais de classes prototypiques JavaScript droites.


Dupliqué possible de Comment accéder au bon Ceci / Contexte à l'intérieur d'un rappel? ?


@Bergi: Pour le compte rendu, j'ai posé cette question en 2009. La question que vous avez liée a été posée en 2013.


@Michael: Ouais, mais ça n'a pas d'importance. Les hauts sont fermés par la qualité des réponses, pas par date; Celui que j'ai lié est la question canonique sur la perte de ce . Je n'étais pas sûr que ce soit un duplicata "exact", c'est pourquoi je ne l'ai pas simplement fermé mais que je n'ai que commenté. Le lien est définitivement utile pour tous ceux qui visitent cette question.


4 Réponses :


9
votes

Votre "que = Cet idiome" est toujours applicable: xxx


0 commentaires

5
votes

Vous devriez essayer xxx


0 commentaires

13
votes

Vous avez besoin de:

this.link.onclick = this.EventMethod.bind(this);


2 commentaires

Comment onclick a-t-il accès à l'interface d'événement?


@Karl par "Accès à l'interface d'événement" Voulez-vous dire "recevoir l'objet d'événement comme une dispute"? La méthode lid renvoie une fonction (avec un corrigé ), donc onclick = this.eventmethod est fondamentalement le identique à onclick = this.eventmethod.bind (this) . Dans les deux cas, vous stockez une fonction dans la propriété onclick ; Ils sont identiques en termes de gestion de leurs arguments. Si votre question est plus générale sur la manière dont les arguments sont transmis aux fonctions d'auditeur, c'est une question assez différente de celle qui est posée ici et que vous devriez poser une nouvelle question.



0
votes

Comme indiqué ci-dessus, en utilisant la liaison qui fait partie de la bibliothèque de prototypes est un moyen propre de résoudre ce problème. Cette question est un duplicata d'une autre question à laquelle il est répondu ici avec la mise en œuvre de la méthode de liaison sans inclure toute la bibliothèque de prototypes:

https://stackoverflow.com/a/2025839/1180286


1 commentaires

Cette question utilise jQuery. Je préférerais beaucoup voir une pure question javascript / réponse soit la norme.