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 :

Variable me retourne undefined


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Par défaut Variable me retourne undefined
    Bonjour, je suis actuellement un tuto en ligne mais j'ai un soucis avec le code d'exemple

    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
    18
    19
    20
    21
    22
    23
    function Tileset(url) {
    	// Chargement de l'image dans l'attribut image
    	this.image = new Image();
    	this.image.referenceDuTileset = this;
    	this.image.onload = function() {
    		if(!this.complete) 
    			throw new Error("Erreur de chargement du tileset nommé \"" + url + "\".");
    		// Largeur du tileset en tiles
    		this.referenceDuTileset.largeur = this.width / 32;
        }
    	this.image.src = "tilesets/" + url;
    }
    // Méthode de dessin du tile numéro "numero" dans le contexte 2D "context" aux coordonnées xDestination et yDestination
    Tileset.prototype.dessinerTile = function(numero, context, xDestination, yDestination) {
    	var xSourceEnTiles = numero % this.largeur;
        console.log(this);
        console.log(this.largeur);
    	if(xSourceEnTiles == 0) xSourceEnTiles = this.largeur;
    	var ySourceEnTiles = Math.ceil(numero / this.largeur);
    	var xSource = (xSourceEnTiles - 1) * 32;
    	var ySource = (ySourceEnTiles - 1) * 32;
    	context.drawImage(this.image, xSource, ySource, 32, 32, xDestination, yDestination, 32, 32);
    }
    Output pour le console.log(this)

    Tileset
    image: img
    largeur: 6
    __proto__: Tileset
    Output pour le console.log(this.largeur)
    undefined
    Voila si vous avez une petite idée du problème.

    Site de l'exemple fonctionnel ou le code est le même : Exemple

  2. #2
    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
    C'est tout à fait normal.
    Ici, l'événement onload n'est pas déclenché par ton objet mais par l'objet HTML image or this correspond toujours à l'objet qui a appelé la méthode en question (ce qui explique que dans la fonction de rappel, tu peux utiliser this.complete). C'est d'ailleurs ce que t'indiquent les messages dans la console : this est bien l'objet image et un objet image ne possède pas de propriété largeur, qui vaut donc undefined.
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 33
    Par défaut
    J'avais compris le code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.image.referenceDuTileset = this; // ajoute une propriété referenceTileset à this.image (this étant le Tileset) qui pointe vers this (this étant le Tileset)
    this.referenceDuTileset.largeur = this.width / 32; // ajoute une propriété largeur à this.referenceDuTileset (this étant image et reférenceDuTileset étant le pointeur vers Tileset) donc rajouter une propriété largeur au Tileset
    Car quand je vérifie sur le site je ne vois aucune différence dans le code et pourtant cela fonctionne bien.

    Je m'excuse d'avance si j'emploi des termes peut être inadapté au langage.

Discussions similaires

  1. Variable qui retourne "undefined"
    Par chok371 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/01/2011, 20h27
  2. [RegExp] Variable retournée undefined
    Par yciabaud dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2008, 11h38
  3. Réponses: 2
    Dernier message: 23/12/2007, 10h29
  4. document.getElementById('livre').value retourne undefined!
    Par sara21 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/05/2007, 14h08
  5. this.form retourne undefined avec <a>
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/03/2007, 09h51

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