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 :

portée du mot clef this


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Par défaut portée du mot clef this
    Bonjour,

    je cree un objet ligne de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function line(Point1, Point2, color) {
     
    	this.Point1 = Point1;
    	this.Point2 = Point2;
    	this.color = color;
    	this.type = "line";
    }
    je la test de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function test_line(ctx) {
     
    	var Point1 = Array();
    	var Point2 = Array();
     
    	Point1[0] = 100;
    	Point1[1] = 100;
    	Point2[0] = 200;
    	Point2[1] = 100;
     
    	var color = "black";
     
    	var l = new line(Point1, Point2, color);
     
    	alert("ligne du point: "+l.Point1[0]+", "+l.Point1[1]+" au point: "+l.Point2[0]+", "+l.Point2[1]+" et de couleur: "+l.color);
    }
    ce qui me donne le message suivant:
    ligne du point: 100, 100 au point: 200, 100 et de couleur: black
    mais lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Point1[0] =  "une erreur";
     
    alert("ligne du point: "+l.Point1[0]+", "+l.Point1[1]+" au point: "+l.Point2[0]+", "+l.Point2[1]+" et de couleur: "+l.color);
    le message est:
    ligne du point: une erreur, 100 au point: 200, 100 et de couleur: black

    or le message devrait etres inchange car c'est la valeur de Point1[0] qui a ete modifier et non celle de l.Point1[0].

    Si une ame charitable pouvait me corriger pour que les variables de mes objets leurs soient propre et dans le meme temps m'expliquer ce qui ne va pas ou ce que j'ai loupe

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    euh...non, la réponse paraît logique; tu définis la valeur de propriété à "une erreur" (premier argument dans l'appel d'objet) donc l.Point1 te renvoie "une erreur";

  3. #3
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    En javascript, il y a 2 types de variables :

    1) Les primitives :
    -Number
    -String
    -Boolean

    2) Les objets.
    -Tout le reste^^

    Les variables de type "primitive" recoivent une "valeur" stockée en elles, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var a,b;
    a=b=1; // a=1 & b=1
    b=2; // a=1 & b=2
    Tandis que les variables "objets" sont en réalité une référence(pointeur) vers un objet commun à tout ceux qui auront son "adresse".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var a,b;
    a=b={}; // a={} & b={}
    b.attri=2; // a={attri:2} & b={attri:2}
    Il te faut donc "cloner" tes objets si tu veux qu'ils soient distincts.

    Autant un "objet" de type "object" nécessite en général une boucle pour le cloner(boucle récursive en cas d'objet sur plusieurs niveau)(ou encore un parse(stringify) fera l'affaire) autant un objet de type "array" peut se cloner (pour un tableau sur 1 dimension) avec une simple fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var maCopie = monArray.slice(0);
    En espérant t'avoir aidé.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2012, 14h16
  2. portée du mot clef break;
    Par mamelouk dans le forum C++
    Réponses: 10
    Dernier message: 23/06/2008, 21h46
  3. Réponses: 7
    Dernier message: 08/01/2006, 21h07
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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