Partage
  • Partager sur Facebook
  • Partager sur Twitter

POO avec javascript

    25 novembre 2010 à 11:17:07

    Bonjour à tous,

    j'envoie ce message pour demander votre avis car je fais de la POO en javascript la et mon code marche mais j'aimerais l'améliorer et je voudrais des idées. En fait je ne sais pas si ma façon de programmer ma classe est idéale, j'utilise jquery et je cherche des moyens de créer des classes en jquery mais je ne trouve rien pour l'instant. Sinon n'hésitez pas à faire des remarques, alors voila une classe assez courte en exemple

    /**
    *
     File : DatasForm
    *	
    **/
    
    function DatasForm(aTestName) {
    	
    	/****** CONSTRUCTOR *******/	
    	
    	this._testName = aTestName;
    	this._nbTables = 0;	
    	this._tables = new Array();
    	
    	/****** END CONSTRUCTOR *******/
    	
    	/****** METHODS *******/
    	
    	
    	this.addTable = function(aTypeOfTable, aTableNum, aTableName, aLinesName, aColumnsName, aNbLines, aNbColumns){
    		var tab = new TableOfInputs(aTypeOfTable, aTableNum, aTableName, aLinesName, aColumnsName, aNbLines, aNbColumns);
    		this._tables[this._nbTables] = tab;
    		this._nbTables++;
    	}
    	
    	this.generateDatasFormCode = function(father){
    		
    		var chain='<div class="st_box">Saisie des donn&eacute;es</div>'
    		chain+='<div class="st_box_text">';
    		chain += '<form action="test.php" method="post" id="DatasForm">';
    		//InputsTables 
    		//begin
    		chain+='<div id="DatasInputs">';
    
    		//end
    		chain+='</div>';
    		chain+='<div id="FormsInterface"><input type="submit" value="Lancer le test"/><input type="reset" value="Annuler"/></div>';
    		chain+='</form>';
    		chain+='</div>';
    		$(father).append(chain);
    
    		
    		for (var i=0;i<this._nbTables;i++){
    			this._tables[i].generateTableOfInputsCode('DatasInputs');
    		}
    		//animation
    		
    		$('#DatasForm').fadeIn("normal");
    		
    	}	
    
    		
    	/****** END METHODS *******/	
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      25 novembre 2010 à 11:54:59

      Perso, ton code me semble tout à fait correct.

      Sinon, créer des classes avec jQuery, c'est pas fait pour, disons.

      jQuery existe juste pour simplifier l'accès et les manipulations du DOM. Au-delà de ça, le framework ne permet pas d'agir sur le Core JS.
      • Partager sur Facebook
      • Partager sur Twitter
        25 novembre 2010 à 12:57:41

        Citation

        jQuery existe juste pour simplifier l'accès et les manipulations du DOM. Au-delà de ça, le framework ne permet pas d'agir sur le Core JS.


        Exact mais rien n’empêche d'encapsuler Jquery dans tes propre classes pour rendre ton code plu modulaire. et j’avoue que ce style est plutôt parfait pour une réutilisation.
        Pour ton code je pense que ça va et si tu veux un exemple complet d'un script qui fait OOP avec jquery regarde mon code la : http://code.google.com/p/yalamo-php/so [...] /qj/qj-0.8.js
        c'est le module javascript de yalamo framework nommé Qj.
        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2010 à 14:12:40

          ok ca marche mais pourtant j'ai lu sur le site de jquery qu'on pouvait créer des objets et faire des choses intéressantes comme la fusion d'objets. Par exemple la mon objet TableOfInputs prend en argument une liste de paramètres dont certains sont des options et d'autres sont obligatoires. Je me suis renseigné et j'ai trouvé jquery.extend :

          http://api.jquery.com/jQuery.extend/

          qu'en pensez vous ?
          • Partager sur Facebook
          • Partager sur Twitter
            25 novembre 2010 à 14:27:48

            Ouais, ils proposent aussi quelques petites fonctions utilitaires, m'enfin ça casse pas trois pattes à un canard, et ce n'est pas le but ultime du framework.

            Mais si tu choisis d'utiliser jQuery, alors oui, abuses-en à souhait. Faut bien rentabiliser le poids de la lib :-°
            • Partager sur Facebook
            • Partager sur Twitter
              25 novembre 2010 à 14:54:13

              ok donc quand on fait

              var object1 = {
                apple: 0,
                banana: {weight: 52, price: 100},
                cherry: 97
              };
              


              on crée un objet javascript avec jquery, c'est ca ?
              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2010 à 15:05:03

                Non. Là, t'as créé un objet JavaScript tout court.
                • Partager sur Facebook
                • Partager sur Twitter
                  25 novembre 2010 à 16:10:23

                  jQuery ce traduit par le "$(...)", le dollar signifiant l'appartenance à la librairie jQuery (sauf s'il est changé pour éviter un conflit :lol: ).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 novembre 2010 à 20:37:27

                    Btw, rajouter un _ ne rend pas tes variables privées.
                    Faut faire autrement ;)
                    function Constructeur( ) {
                        var variable_privee = "valeur privée";
                        this.toString = function ( ) {
                            return variable_privee;
                        };
                    }
                    ( new Constructeur( ) ).toString( );//"valeur privée"
                    


                    Et si tu veux pas rendre tes variables privées, tu peux mettre tes méthodes dans le prototype.
                    function Constructeur( ) {
                        this.attribut_public = "valeur publique";
                    }
                    Constructeur.prototype.toString = funtion ( ) {
                        return this.attribut_public;
                    };
                    ( new Constructeur( ) ).toString( );//"valeur privée"
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 novembre 2010 à 23:15:49

                      Si jamais tu cherches un framework un peu plus adapté pour faire du JS OO, jette un oeil à Mootools, très bien fait pour ça.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        26 novembre 2010 à 8:27:52

                        hé les copains, faire de la POO en JS c'est comme faire du ski dans le nord, tu dois construire ta montagne avant de pouvoir jouer dessus.

                        js c'est de la programmation orienté prototype, les classes n'existent pas, bla bla bla

                        @evanxg : ça va les chevilles ? la première moitié de ton code est inutile, le milieu est maladroit et la fin est franchement mauvaise. Il fait pas de l'OOP ton code, ton utilisation de .prototype est à coté de la plaque.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 novembre 2010 à 9:03:51

                          Citation


                          ça va les chevilles ? la première moitié de ton code est inutile, le milieu est maladroit et la fin est franchement mauvaise. Il fait pas de l'OOP ton code, ton utilisation de .prototype est à coté de la plaque


                          La premiere partie du code ce d'avoir un code plus facile a maintenir et avoir un nom d'espace ce qui crucial pour un code modulaire, ensuite il y a le type checking en mettant dans types au lien d'ecrire partout "function", "undefined" bla bla ...

                          //validators inherite from collectionvb 
                          Qj.Form.Validators=function(rules){
                                  Qj.Collection.call(this,rules);
                                  
                                  this.Add=function(id,rule,message){
                                          if(typeof(message)==Qj.Types.Undefined()){
                                                  message="Error!";
                                          };
                                          var validator={ Id:id, Rule:rule, Message:message};
                                          this.Push(validator);
                                  };
                                  
                          };
                          Qj.Form.Validators.prototype=new Qj.Collection();
                          Qj.Form.Validators.prototype.constructor=Qj.Form.Validators;
                          

                          la majeur partie des functions sont static pour permetre une utilisation plus simple
                          d'un autre cote j'aimerais savoir comment tu utilise prototype dans le cas ci dessus ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 novembre 2010 à 9:41:29

                            J’utilise pas du classique.
                            mes références :
                            http://www.amazon.com/JavaScript-Defin [...] dp/0596000480
                            Chap 9 .
                            https://developer.mozilla.org/en/JavaScript/Guide
                            et V8 http://code.google.com/p/v8/

                            En plus si vous pensez que c pas l'héritage comment se fait qu'avec cette syntaxe j’obtiens toutes les fonctionnalités de la class collection. Les techniques de la programmation sont différentes de l'implémentation. Sachez qu'on peu faire de l'héritage sans utiliser les mots clé dédiés à cet effet (extends par exemple).
                            En encapsulant un object de la class hérité comme membre de la class fille vous obtenez les fonctionnalités dans la class mère en passant par l'Object membre.
                            Pour en savoir de ce qui se passe en dessous de JavaScript essayer de voir v8 le moteur JavaScript de chrome : http://code.google.com/p/v8/ (c++)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 novembre 2010 à 12:19:14

                              Crap. Me suis planté de lien >_<
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 novembre 2010 à 15:57:12

                                Citation : nod_

                                les classes n'existent pas, bla bla bla



                                Je m'étonnais que tu n'aies pas encore débarqué sur le topic. Voilà qui est fait :D
                                • Partager sur Facebook
                                • Partager sur Twitter

                                POO avec javascript

                                × 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