IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Pourquoi copier le this ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Pourquoi copier le this ?
    Bonjour,

    Dans beaucoup de code Javascript la premiere chose qui est faite est:
    Pourquoi copier le this ?

    Car toutes modifications dans le that sera copier dans le this non ?

    Merci pour vos explications.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Cette méthode est utilisé pour des raisons de "scope" (portée) de variable.

    Ma variable that n'est pas une référence à this, elle est donc attribuée à un instant donné et ne subit pas les modifications de this.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    that est une simple copie alors ? Il n y a plus de reference entre this et that, c'est bien ca ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Si : les deux variables référencent le même objet, donc toute modification de l'une sera répercutée dans l'autre. Mais comme expliqué par Spaffy, l'appel de certaines méthodes (notamment les timers ou les événements) font que dans leur callback, this ne correspond plus au même objet, du coup, tu peux avoir besoin de conserver une référence à l'objet d'origine via une autre variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    window.foo = 'bar';
    var Exemple = function(){
        this.foo = 'baz';
        this.timer = function(){
            var that = this; // this correspond ici à l'instance de l'objet
            console.log(this.foo);
            setTimeout(function(){
                console.log(this.foo);  // "bar"
                console.log(that.foo);  // "baz"
            });
        };
    }
    var monExemple = new Exemple();
    mon
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Ce n'est pas vraiment une copie mais une sauvegarde de la référence au this courant pour ne pas le perdre.
    that est bien une référence à this. Mais pas n'importe quel this. Tu as tout compris hein ?

    En fait, on ne voit cette sauvegarde de référence que dans un cas bien particulier. C'est un soucis sur la spéc des fonction imbriquées. Le this ne pointe pas sur l'objet parent de la fonction mais sur l'objet qui appelle la fonction.
    Quand une fonction est exécutée, le this réfère donc à l'objet qui appelle cette fonction.

    Pour compléter les compères ci-dessus, voici un petit fiddle. Si c'est encore flou, n'hésite pas

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    C'est quand même mieux quand les devs prennent le temps de nommer correctement la variable: currentItem, itemInstance... Ou encore utiliser Function.prototype.bind dont le support commence à être quasi-généralisé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pourquoi je ne peux pas copier et ecrire
    Par yvkoe dans le forum Général Python
    Réponses: 8
    Dernier message: 15/09/2009, 17h17
  2. Copier-coller d'une image: Pourquoi ?
    Par manu2000 dans le forum Word
    Réponses: 11
    Dernier message: 08/06/2009, 10h30
  3. [WD14] Not enough storage is available to process this command? Pourquoi
    Par chapeau_melon dans le forum WinDev
    Réponses: 0
    Dernier message: 28/05/2009, 07h51
  4. [newbie haXe AS3]pourquoi this modifie toutes les instances
    Par Haxor668 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 20/04/2009, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo