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 :

emploi de "this"


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut emploi de "this"
    Bonjour,

    Etant habitué au Java, je suis perturbé par l'emploi de this en Javascript, qui me semble légèrement différent.

    En particulier, si j'ai une classe définie par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    maClass = function() {
        monAttribut = 0;
        func1 = function() { this.monAttribut = 1;}
        func2 = function() { monAttribut = 1;}
    Ces deux fonctions sont-elles identiques? Parce qu'après un test, j'ai l'impression que func2 crée une variable globale monAttribut...

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Il me semble que ta remarque est juste car si tu ne précises pas this, dans ce cas il recherche dans son bloc s'il y a une variable qui s'appelle de la même manière sinon il en crée une!


    Donc il est possible qu'il la crée! A confirmer!


    De plus, lorsque nous voulons déclarer une variable en javascript, il est raisonnable de précédé le nom de la variable par "var" mais si on ne le met il n'y aura pas d'erreur!

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Bon, ben du coup, je comprends pas comment je dois utiliser les variables en javascript. Voilà ce que j'ai dans mon fichier javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var Document = function(jDocText) {
     
        var doc = null;
     
        loadDocument = function(jDocText) {
            doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText);
            alert(doc);//*************** alerte 1 *********************
        }
     
        loadDocument(jDocText);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var cDoc = null;
    cDoc = new Document(xhr.responseText);
    alert(cDoc.doc);//*************** alerte 2 *********************
    alerte1 renvoie "[object Object]"
    alors que alerte2 renvoie "undefined"...

    Je ne comprends pas pourquoi les deux ne renvoient pas là même chose...

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    remplace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText);
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText);
    et alert(doc) par alert(this.doc)

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut,
    on doit toujours utiliser this pour désigner les propriétés de la classe.

    D'autre part, le constructeur reste une fonction comme les autres. Avec ce code :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    maClass = function() {
       monAttribut = 0;
    }
     
    var obj = new maClass();
    Le simple fait d'instancier obj crée une variable gobale monAttribut.

    Pour être plus précis :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    maClass = function() {
       glob = 0;
       var loc = 1;
       this.prop = 2;
    }
    var obj = new maClass();
    Après exécution de ce bout de code, tu as une variable globale glob égale à 0, et un objet obj qui a une propriété prop égale à 2.

    Quant à loc, c'est généralement une variable locale au constructeur. Je dis bien généralement, car si tu déclares des méthodes de classe à l'intérieur du constructeur, tu peux accéder à loc depuis ces méthodes, grâce au principe des closures. Mais je te conseille d'éviter ça
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    @david55 : Merci pour ton aide.

    Malheureusement, perso, j'obtiens le même résultat : un objet avec alert1, et undefined avec alert2. Chez toi ça marche?

    @Watilin : c'est cool ! Merci pour ces explications ! C'est fou : on trouve rien sur le net qui explique ça aussi clairement que tu viens de le faire...

    J'essaie tout de suite

  7. #7
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Non je ne peux pas essayer de chez moi mais je pense que tu devrai prendre ne compte les remarques de Watilin qui sont très intéressante

    Si je trouve une autre solution je te tiens au courant (idem pour toi bien sure)

    Essaye de remplacer par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var Document = function(jDocText) {
     
        this.doc = null;
     
        loadDocument = function(jDocText) {
            this.doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText);
            alert(this.doc);//*************** alerte 1 *********************
        }
     
        loadDocument(jDocText);
    }

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

Discussions similaires

  1. onmouseover="Menu_HoverStatic(this)" object expected
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 0
    Dernier message: 01/10/2010, 16h01

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