362 votes

Ce qui sous-tend cet idiome JavaScript : var gites = cela ?

J’ai vu ce qui suit dans la source pour WebKit HTML 5 SQL stockage Notes Demo:

L’auteur utilise soi dans certains endroits (le corps de la fonction) et ce dans d’autres endroits (les corps de fonctions définies dans la liste des arguments de méthodes). Que se passe-t-il ? Maintenant que j’ai remarqué une fois, j’ai commencera partout en la voyant ?

436voto

Jonathan Fingland Points 26224

Voir : http://www.alistapart.com/articles/getoutbindingsituations

sert à conserver une référence à l’original alors même que le contexte évolue. C’est une technique souvent utilisée dans les gestionnaires d’événements (en particulier dans les fermetures).

98voto

Duan Yao Points 105

Je pense que le nom de la variable « individu » ne doit pas être utilisé de cette façon plus, puisque les navigateurs morden fournissent une variable globale `` pointant vers l’objet global d’une fenêtre normale ou un WebWorker.

Pour éviter toute confusion et conflits potentiels, vous pouvez écrire ou au lieu de cela.

35voto

Nosredna Points 33670

Oui, vous le verrez partout. C'est souvent "that = this".

Voyez comment "self" est utilisé dans les fonctions appelées par les événements? Ceux-ci auraient leur propre contexte, de sorte que self est utilisé pour contenir le "ceci" qui est entré dans Note ().

La raison "self" est toujours disponible pour les fonctions, même si elles ne peuvent s'exécuter qu'après l'exécution de la fonction Note (), c'est que les fonctions internes obtiennent le contexte de la fonction externe en raison de "closure".

28voto

Max Points 2763

Il convient également de noter, il est un autre modèle de Proxy pour le maintien d'une référence à la version originale this dans un rappel si vous n'aimez pas l' var self = this idiome.

Comme une fonction peut être appelée avec un contexte donné en utilisant function.apply ou function.call, vous pouvez écrire un wrapper qui retourne une fonction qui appelle la fonction avec apply ou call à l'aide de la contexte donné. Voir jQuery proxy de la fonction pour une mise en œuvre de ce modèle. Voici un exemple d'utilisation:

var wrappedFunc = $.proxy(this.myFunc, this);

wrappedFunc peut ensuite être appelé et vous recevrez votre version d' this , selon le contexte.

9voto

Mehrdad Afshari Points 204872

La variable est capturée par les fonctions en ligne définies dans la méthode. this dans la fonction fera référence à un autre objet. De cette façon, vous pouvez faire en sorte que la fonction contienne une référence au this de la portée externe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X