Partage
  • Partager sur Facebook
  • Partager sur Twitter

[POO] Envoie de valeurs à une method

Sujet résolu
    7 août 2010 à 21:43:12

    Bonjour,

    j'essaie d'envoyer à une method de ma class une valeur pour m'en servire, le code se présente ainsi :

    tableau2D.prototype.innerHTMLDocument = function(i)
    {
    	return this.grille[i][i];
    };
    


    Mais lors de son appel, il n'y a pas l'aire de retourner la valeur de la cellule à la position {i}{i} :

    .
    		<div id="ta">
    		
    		</div>
    		
    		<script type="text/javascript">
    			for(var i = 0; i<tableau.lengthT; i++)
    				document.getElementById('ta').innerHTML += tableau.innerHTMLDocument(i);
    		</script>
    


    Tout ceci est contenu dans la balise <body>, quand à la class, dans un fichier tableau2D.class.js

    Résultat : rien ne s'affiche dans la div.

    Ma method lengthT :

    tableau2D.prototype.lengthT = function()
    {
    	return this.grille.length;
    };
    


    Je n'ai aucunes erreurs depuis le déboggueur de Chrome, mais je pense que le fait d'envoyer un paramètre à la fonction et de faire ainsi tableau2D.prototype.innerHTMLDocument = function(i) ne fonctionne pas.

    Dans ce cas, comment faire pour envoyer un paramètre à cette fonction ?

    Merci par avance pour vos réponses, j'apprends actuellement la poo en js ...
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2010 à 11:29:08

      Normalement ton code est bon. T'es sûr que grille contient ce que tu veux ?
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2010 à 14:04:57

        oui, enfin je pense, j'instancie un objet tableau2D ainsi :

        var tableau = new tableau2D(
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        );
        


        je fais quelques tests pour m'entrainer en poo et avec des tableau en 2 dimensions donc c'est normal ces 0 et 1 ^^

        Normalement, grille doit contenir :

        function tableau2D()
        {
        	this.taille = 40;
        	this.haut = 10;
        	var t = 0;
        	this.grille = new Array();
        	
        	for(var j=0; j<this.taille; j++)
        		this.grille[j] = new Array();
        		
        	for(var i=0; i<this.taille; i++)
        		for(var k=0; k<this.taille; k++)
        		{
        			this.grille[i][k] = arguments[t];
        			t++
        		}	
        }
        


        c'est pas très beau je l'avoue ...

        grille contient donc
        grille[0][0] = 0
        grille[0][1] = 0
        ...
        grille[8][39] = 0
        grille[9][0] = 1
        ...
        grille[9][39] = 1


        normalement, elle se constitue ainsi, à moins que j'ai une erreur dans l'algorithme, mais dans ce cas, je devrais avoir une erreur dans le develloper tools de chrome ?

        Je me rends compte que je devrais plutôt définir ma method ainsi :

        tableau2D.prototype.innerHTMLDocument = function(i)
        {
                for(var j =0; j<this.grille.length; j++)
        	return this.grille[i][j];
        };
        


        Mais même avec cela ça ne fonctionne pas ...

        Merci d'avoir pris attention à mon message !

        EDIT : désolé de ne pas avoir respecter une règle importante pour le nom de ma class (Tableau2D au lieu de tableau2D)

        EDIT2 : normalement un alert(tableau.grille.lentgh); devrait afficher la taille de l'array grille ? mais il me retourne undefined ... ???
        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2010 à 19:44:29

          Puisque lengthT est une méthode, il faut lui mettre des parenthèses :

          for(
               var i = 0;
               i<tableau.lengthT();
               i++
          )
          	document.getElementById('ta').innerHTML += tableau.innerHTMLDocument(i);
          


          non testé, mais je pense que c'est ça ><
          • Partager sur Facebook
          • Partager sur Twitter
            8 août 2010 à 19:58:20

            En effet ça marche :)
            Mais j'avoue ne pas comprendre, car certaines fois, j'utilise des methods sans parenthèses et ça marche, or quand je n'en mets pas ça fonctionne ...

            exemple fonctionne :
            document.onkeypress = tableau.key_process;
            


            fonctionne très bien :

            .
            		function key_process()
            		{
            			if (window.event.type == "keypress" & window.event.keyCode > 0)
            			{
            				if(window.event.keyCode == 54)
            					this.RightPosition();
            				else if(window.event.keyCode == 52)
            					this.LeftPosition();
            			}
            			return true;
            		};
            


            certaines choses parfois m'échappent, m'enfin c'est un autre problème que je vais essayer de résoudre seul, j'vous ai assez embêté :D

            Merci pour tout Darkodam !
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2010 à 21:25:33

              oui, mais non. ^^

              Quand tu fait document.onkeypress = tableau.key_process; , tu assignes une fonction à un évènement. C'est à dire que tu demandes à document de lancer la méthode tableau.key_process quand on appui sur une touche.

              Quand le navigateur va détecter l'appui d'une touche, c'est comme si il faisait :
              tableau.key_process()
              


              Les parenthèses sont bien présentes =)
              • Partager sur Facebook
              • Partager sur Twitter
                9 août 2010 à 20:30:10

                ah ok je comprends, j'avais oublié par hasard les parenthèse et j'ai remarqué que ça marchait sans, merci pour les explications :)
                • Partager sur Facebook
                • Partager sur Twitter
                  9 août 2010 à 21:34:15

                  En réalité, ça ne fonctionnerait pas, avec.

                  Si tu remplaçais :
                  document.onkeypress = tableau.key_process;
                  

                  par :
                  document.onkeypress = tableau.key_process();
                  

                  alors, tableau.key_process serait appelée et son résultat serait assigné à document.onkeypress .

                  Sans les parenthèses, c’est bien la méthode key_process de tableau qui est assignée à document.onkeypress .
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [POO] Envoie de valeurs à une method

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown