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

Contribuez Discussion :

[POO] [ADAPTABLE][SRC]Gestion de la POO en JavaScript


Sujet :

Contribuez

  1. #1
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut [POO] [ADAPTABLE][SRC]Gestion de la POO en JavaScript
    Voici un systeme de gestion de la POO en Javascript

    auteur : FremyCompany

    Télécharger le code complet

    Utilisation :
    Code javascript : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    // Ajout d'un sous espace de nom à System
                with(System.addNameSpace("My")) {
                    // Ajoute d'une classe
                    with(addClass("MyClass", /* Constructeur, argument facultatif */ function() {
                        /* Cet appel est requis par le Designer de classe */
                        this.getType().New(this);
     
                        /* Vous pouvez ajouter ici tout autre appel prévu par votre fonction */
                        // Utilisation d'un Evenement (créé ici par la propriété)
                        this.onFieldChange.addHandler(function(sender, e) {
                            sender.Field=sender.getField();
                        });
                    })) {
                        addProperty("Field"); // Ajoute une propriété public à la classe (n'a aucun rapport avec le champ Field, le rapport officieux est effectué ligne 11)
                        addSub("resetField", function() { this.setField(null); }) // Ajoute une fonction à la classe
                        /*
                            addEvent("X") // Ajoute l'evenement onX à la classe
                            addClass("subClass") // Ajoute une sous classe
                        */
                    }
                }
     
                // Instanciation de la classe
                var MCI=new System.My.MyClass();
     
                // Invocation d'une propriété (get/setP)
                MCI.setField("value");
     
                // Création d'un délégué
                var getMCIField=CreateDelegate(MCI.getField, MCI);
     
                // Utilisation du délégué, le lien avec l'objet est fait par JavaScript
                alert("getMCIField:"+getMCIField());
     
                // Invocation d'une fonction (F)
                MCI.resetField();
                alert("MCI.getType().getPath():"+MCI.getType().getPath());
     
                // Destruction partielle de l'objet (pour prendre de vitesse le Garbage Collector)
                // MCI.dispose();
     
                // Test de getType()
                try { alert("document.getType():" + document.getType().getPath()); } catch (ex) {} //(IE:Erreur; FF:System.Object)
                alert("getTypeOf(document):" + Object.getTypeOf(document).getPath()) //(IE:System.XMLNode; FF:Idem)
                alert("getTypeOf(document.firstNode):" + Object.getTypeOf(document.firstNode).getPath()) //(IE:System.Undefined; FF:Idem) ((PS::document.firstNode doesn't exist))
                alert("getTypeOf(null):" + Object.getTypeOf(null).getPath()) //(IE:System.Undefined; FF:Idem)
                alert("getTypeOf(Function):"+getTypeOf(function() {}).getPath());
     
                // Test de isSubClassOf
                with(System.addClass("TestEventArgs")) {
                    inherits(System.EventArgs);
                }
                with(System.addClass("TestEventArgs2")) {
                    inherits(System.TestEventArgs);
                }
                var T=new System.TestEventArgs2();
                alert("SubClassOf(T,EventArgs&Object):"+isSubClassOf(T, System.EventArgs) + "&" + isSubClassOf(T, System.Object))
                alert("InstanceOf(T,TestEventArgs2):"+isInstanceOf(T, System.TestEventArgs2))
                alert("InstanceOf(T,TestEventArgs):"+isInstanceOf(T, System.TestEventArgs))
                alert("SubClassOf(T,Event):"+isInstanceOf(T, System.Event))
                alert("SubClassOf(3,Number):"+isSubClassOf(3, System.Number))
                alert("SubClassOf(false,Boolean):"+isSubClassOf(false, System.Boolean))
                alert("SubClassOf(Type,Function):"+isSubClassOf(T.getType(), System.Function))
                // Test forEach
                var t1={"value":true,"value2":false}
                alert("forEach: all")
                t1.forEach(function(o,k) { alert (k) })
                alert("forEach: ownPropertiesOnly")
                t1.forEach(function(o,k) { alert (k) }, true)
                t1=["value","value2"];
                alert("Array; forEach: all")
                t1.forEach(function(o,k) { alert (k) })

    Remarques :
    Ce code n'en est qu'à ses débuts. Il gère IE+FF+Opéra.
    Il gère actuellement :
    - Espaces de noms
    --- Importation
    --- Sub NameSpace
    - Classes
    --- Création simple
    --- Propriétés (r/w) avec champs privés
    --- Gestion poussées des evenements
    --- Héritages
    --- Réflection (Début)
    - Add-ins et interfaces (déjà implémenté, mais pas d'exemple)
    - Meilleurs performances du code
    - Fonctions de base implémentées (returnNull, returnFalse, emptyConstructor)
    - Création de délégués (lier une fonction à un objet)
    - ...
    Dans le futur, je projète de pouvoir ajouter du commentaire à une fonction (ou propriété). Je vais aussi faire un exemple pour ce qui est de l'utilisation d'Add-In ou d'interface

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Petite mise à jour (2 --> 2.1) [AJOUT: 2.1-->2.4]
    - Amélioration de la réflection :
    --- getType().name ==> getType().objectName;
    --- getType().parent ==> renvoie l'objet parent dans l'arborescence (System pour System.Class1)
    --- getType().parentType renvoie "namespace" ou "class" selon les cas ==> decrapted, utilisation déconseillée, mieux vaut utilier parent.getType().objectName ("Type" ou "NameSpace")
    --- getType().getPath() ==> renvoie l'arborescence de la classe (System.MyClass);
    --- getType().getType() renvoie System.Type ou System.NameSpace;
    --- Les objets créés autrement que par le framework sont automatiquement considérés comme des System.Object et sont donc pris en charge
    PS1 : Sous IE, les objets comme window et document N'héritent PAS de System.Object mais bien de System.ActiveXObject et ne possèdent pas les fonctions de réflections normales
    PS2 : les objets par valeurs (nombres, boolean, ...) sont pris en charge artificiellement par le framework via System.Number, System.Boolean et System.Undefined. Néamoins, ils restent des objets par valeur. Prière donc d'utiliser getTypeOf pour en objtenir le type managé.

    --- Ajout de getTypeOf, isInstanceOf et isSubClassOf comme méthodes assurées de réflection
    - Corrections de qques bugs

    Up : 2.4.1
    - Correction de qques bugs
    - Ajout de Throw() pour utiliser la console FF
    Fichiers attachés Fichiers attachés

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Oui, alors là, c'est .... adaptable

    Franchement, c'est une bonne idée, mais c'est vraiment très vaste comme champ. A mon avis, ça vaut largement le coup d'en faire un article. Ca te dit de passer redac, Fremy

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par denisC
    Oui, alors là, c'est .... adaptable
    lol, si je te le dis, c'est que ca a du vrai
    Franchement, c'est une bonne idée, mais c'est vraiment très vaste comme champ. A mon avis, ça vaut largement le coup d'en faire un article. Ca te dit de passer redac, Fremy
    Ben oui si j'arrive à avoir le temps de m'y mettre (vive les vacances de noël!)... Ben pk pas... d'un autre coté, je ne vois pas pk je devrais changer de statut pour écrire un tutoriel...
    Je resterait tjrs Fremy, et ce avec une deux ou trois étoiles

    Lol, allez, moi je file, j'ai un CS en Géographie demain !

  5. #5
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par FremyCompany
    Je resterait tjrs Fremy, et ce avec une deux ou trois étoiles
    Pas d'étoiles pour les auteurs. Tu auras juste des plumes Jaunes. Et effectivement, ça ne changera rien d'autre.

    C'est pas le fait que j'ai plein de plumes rouges et d'étoiles qui change qui je suis : toujours assez irresponsable

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par denisC
    Pas d'étoiles pour les auteurs. Tu auras juste des plumes Jaunes...
    Mouais, t'auras compris ce que je voulais dire
    C'est pas le fait que j'ai plein de plumes rouges et d'étoiles qui change qui je suis : toujours assez irresponsable
    Mdrr

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Lol, je dois dire que je n'ai aucune idée par rapport à comment on fait/rédige un tutoriel, une documentation (et encore plus pour js)...

    Je sèche un peu...
    Vous pouriez donner votre avis sur les textes suivants ?

    Documentation/Tutoriel :
    Documentation Alpha 2 (basée sur la version 2.1.1 du Framework)
    --------------------

    Qu'est-ce que la POO ?
    La POO est la gestion des classes et des objets.
    De nos jours, la majorité des langages sont construit sur le modèle de la POO.
    Parmis eux, citons bien sûr les célèbres languages .Net et le portable Java ainsi que l'archaïque C.

    Par défaut, JavaScript n'est pas prévu pour fonctionner avec des classes.
    Il récupére en effet les objets qu'il utilse de langages de programmation compatible POO et se contente de les manipuler.
    Cependant, il existe des astuces pour simuler la POO en JavaScript.
    Microsoft en a déjà tiré parti grâce à son framework : Microsoft AJAX

    Voici les choses qu'il faut savoir pour commencer :

    Creer une classe :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        function MyClass() {}
        var MCI /* for MyClassInstance */ = new MyClass();

    Tous les objets créés dépuis le code javascript (sans recours direct à window ou document) hérite de Object
    Ici, MCI n'a rien de plus qu'un simple objet.

    Ajouter un champ (field) à la classe :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        function MyClass() {
            this.aField="value";
        }
        var MCI = new MyClass();
        alert(MCI.aField)

    Un objet javascript est extensible. Cela veut dire que l'on peut à sa guise modifier toutes les propriétés d'un objet (champs, fonctions, ...).
    Ajouter un champ dans le constructeur n'a donc d'interêt que si le champ a une valeur de départ (ou dépend d'un paramètre du constructeur)
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        function MyClass() {
            this.aField="value";
        }
        var MCI = new MyClass();
        MCI.aSecondField="an other value";
        alert(MCI.aSecondField)

    Ajouter une fonction à une classe :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        function MyClass() {
            this.alert(text) = function() { alert(text); };
        }
        var MCI=new MyClass();
        MCI.alert("Message");

    Cependant, cela pose un problème de performance : à chaque fois qu'un objet est crée, la fonction alert est recréée...
    Alors, pour palier à ce problème, on a imaginé la propriété prototype.
    Chaque nouvelle instance possède toutes les fonctions définies sur prototype.
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        function MyClass() {}
        MyClass.prototype.alert=function() { alert(text); }

    Seulement, ce n'est pas très clair, ni très concis.
    Avec l'utilisation de nombreuses classes et de nombreuses fonctions par classe, cela s'empire davantage.

    Avec cela, pensez-vous, vous avez fait le tour de la POO avec Javascript... Et bien non!

    L'héritage :
    Comment faire hériter une classe :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        function MyClass(argument1) { /*...*/ }
        MyClass.prototype.x=function() { /*...*/ }
        function MySecondClass { 
            MyClass.call(this, "A value for the first argument")
            /*...*/
        }
        MySeccondClass.prototype=new MyClass()

    Cela n'est évidemment pas le must point de vue performance... vu qu'il faut crée une nouvelle instance de MyClass, avec tous les problèmes que cela peut poser (arguments, ...)
    De plus, tous les champs ajouté par le constructeur de MyClass seront ajouté automatiquement à MySecondClass...
    Pour palier le problème, et il faut une copie d'objet.
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        // Recopier toutes les propriétés et fonction d'un objet (source) vers un autre (destination)
        // Cette fonction est définie dans le FrameWork
        AddTo(MyClass.prototype, MySecondClass.prototype);

    L'héritage multiple devient alors permis !
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        // Soit C1 et C2 des Classes différentes n'ayant aucun lien d'héritage
        function C3() {
            C1.call(this)
            C2.call(this)
        }
        AddTo(C1, C3); AddTo(C2, C3);

    Vous avez là un apercu de ce que propose JavaScript du point de vue POO.

    Qu'apporte le Framework ?
    Il permet l'utilsation d'espaces de nom et simplifie la création de classe et offre des fonctions de rélexion.
    Les évènements deviennent de véritable entité comme en .Net.
    On peut créer des propriétes avec accesseurs get, set, et un event déclangé après set.
    Remarque : Il est IMPOSSIBLE de changer la valeur de la propriété sans passer par le set !
    ...

    Nous allons ici créer un classe et l'utiliser, vous verrez, tout est clair, si on sait que System est un espace de nom.
    Code JS : 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
     
        // with permet de sous entendre qu'on utilise toujours la valeur retournée par System.addClass(...)
        with (System.addClass("MyClass")) {
            addSub("alert", function(t) { alert(t); }) // Ajouter un fonction à la classe
            addProperty("Property") // Ajoute get/setProperty et l'event onPropertyChange à la classe
            addEvent("Testing") // Ajoute l'event onTesting à la classe...
        }
        var MCI = new System.MyClass();
        MCI.alert("");
        MCI.onPropertyChange.addHandler(function(sender, e) {
            // sender:: l'objet qui a déclanché l'event
            // e:: EventArgs, objet envoyé à chaque fonction de l'event en vue du partage de donnée, généralement inutile
            sender.alert("La propriété a changé !")
        })
        alert(MCI.getProperty()) // null
        MCI.setProperty("Value"); // Alert grâce à l'event
        alert(MCI.getProperty()); // "Value"
        // On execute ici l'event 'pour le plaisir'
        MCI.onPropertyChange.raise(MCI, System.EventArgs.empty) // Alert grâce à l'event
    Et avec une notion d'héritage :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        // Si vous avez défini un constructeur personalisé (voir plus loin) à la classe héritée, vous devez définir le constructeur avec un appel à MyClass.call
        with (System.addClass("C2")) {
            inherits(System.MyClass)
        }
        var C2I = new System.C2();
        C2I.alert("text");
    Ajout de sous-espace de noms et définition de constructeur personalisés
    Code JS : 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
     
        with(System.addNameSpace("NS")) { // Création de System.NS
            with(addClass("NSClass", 
                function(nom, age) { // Constructeur de la classe NSClass
                    /* Cet appel est requis par le Designer de classe */
                    this.getType().New(this);
     
                    /* Vous pouvez ajouter ici tout autre appel prévu par votre fonction */
                    this.nom = nom;
                    this.age = age;
                }
            ) { // Ajout d'une classe avec un constructeur personalisé dans System.NS
                /* 
                addSub(...)
                addProperty(...)
                */
            }
        }

    Utilisser la réflexion (sera encore sujet à modification dans le futur) :
    Code JS : 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
     
        // Nous considérons ici les classes MyClass et C2 et NSClass comme déclarées
        var MCI = new System.MyClass();
        var Type = MCI.getType(); // Obtenir le type d'un objet depuis une instance
        alert(Type.objectName) // "MyClass"
        alert(Type.getPath()) // "System.MyClass"
        alert(Type.parentType) // "namespace", peut aussi valoir "class" (dans le cas de sous-classes)
        alert(Type.parent.objectName) // "System"
     
        /* Astuce : créer un objet du même type qu'un autre 
            var MCI2 = new MCI.getType()();
        */
     
        var C2Type = System.C2; // Récuperer un type d'objet par son nom (path)
        alert(C2Type.getPath()) // "System.C2"
        alert(C2Type.baseClass[1].getPath()) // "System.MyClass"
     
        var NSType = System.NS // Récuperer un type d'espace de nom par son nom (path)
        alert(NSType.parent.getType().objectName) // "NameSpace"
        alert(NS.NSClass.getPath()) // "System.NS.NSClass"

    Lier une fonction à un objet de manière définitive :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        var MCI=new System.MyClass();
        var MCIPropertySetter = CreateDelegate(MCI.setProperty, MCI) // Renvoie une fonction qui est lié avec l'objet passé en seccond argument
     
        // Changer la valeur de la propriété Property de MCI
        MCIPropertySetter("Value"); // Ok
     
        // Le refaire, mais en attachant la fonction à une autre objet
        var MCI2=new System.MCI();
        MCI2.setMCIProperty=MCIPropertySetter;
        MCI2.setMCIProperty("A seccond value");
        alert(MCI.getProperty()) // Ca marche !!!

    Le Framework permet encore plein de chose, que vous pourrez découvrir par vous même...
    Le framework dans le code de tous les jours :
    Utilisation du Framework dans votre code de tous les jours : (Alpha 1, basé sur la version 2.4.1)
    =============================================================

    Pour éviter des erreurs
    Code JS : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
        // Voici un code comme il pouvait être écrit avant :
        function MyClass() {
            this.alert=function(text) {
                alert(text)
            }
        }
     
        function My2Class() {
            this.baseClass=MyClass;
            this.baseClass();
        }
     
        function doAlert(MyClassInstance) {
            MyClassInstance.alert("Message");
        }
     
        function additionne(n1,n2) {
            return parseInt(n1+n2);
        }
     
        // Un moyen pour provoquer une erreur :
        doAlert(true);
        /*
            La seule solution d'éviter cela,
            est d'utiliser try ... catch
            car instanceOf ne gère pas l'héritage,
            et il est difficile de maintenir à long
            terme une notation permettant de le gerer.
        */    
     
        // Ne déclanche pas d'erreur, si une faute d'inatention se place dans le code (ex: résultas incohérents à cause des types : ("1"+"2"=12)),
        // Il est difficile de trouver sa source (ex dans le cas suivant)
        var leNombre = additionne(document.getElementById("input1").value, document.getElementById("input2").value)
    Code JS : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
        // Le même code avec le framwork :
        with(System.addClass("MyClass")) {
            addSub("alert",function(text) {
                alert(text);
            })
        }
     
        with(System.addClass("My2Class")) {
            inherits(System.MyClass);
        }
     
        doAlert = function (MyClassInstance) {
            if (!isSubClassOf(MyClassInstance, System.MyClass) {
                /*Un message d'erreur à afficher dans la console IE ou FF */
                Throw("Incorrect Argument MyClassInstance in doAlert function. Please refer to documentation.")
                return false;
            }
            MyClassInstance.alert("Message");
        }
     
        additionne = function(n1,n2) {
            if (!isInstanceOf(n1, System.Number) || !isInstanceOf(n2, System.Number)) {
                Throw("Attention, des problèmes de types peuvent survenir dans la fonction 'additionne(Number,Number)'. Les types sont :("+getTypeOf(n1).getPath()+","+getTypeOf(n2).getPath()+"). La fonction appelante:'"+(arguments.caller?arguments.caller.name:"no calling function")+"'")
                // Dans le cas ou n1="1" et n2="2"; le message sera : "Attention, des problèmes de types peuvent survenir dans la fonction 'additionne(Number,Number)'. Les types sont :(System.String,System.String)"
            }
            return parseInt(n1+n2);
        }
     
        // Aucune erreur n'est instancié :
        doAlert(true);
     
        // Déclanche une erreur sans bloquer l'exécution, si une faute d'inatention se place dans le code.
        // Il est facile, en regardant la console de trouver la source d'un problème de résultat incohérant ("1"+"2"=12)
        var leNombre = additionne(document.getElementById("input1").value, document.getElementById("input2").value)
    Lol, ca se voit tant que ca que c'est rédigé sur Notepad++ ??
    ==> Voici une mise en forme plus adaptée au forum

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Vu le nombre de changements apportés à mes messages, je me permets de faire un petit up...

  9. #9
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Voici une nouvelle version du FrameWork
    Elle intègre maintenant une totale gestion de Prototype (un autre Framework JS) et permet de "mapper" les objets Prototype vers des types gérés par le FrameWork
    Fichiers attachés Fichiers attachés

  10. #10
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    J'ai cru voir une fonction $H, est-ce ton framework INTÈGRE prototype ou est-ce qu'il faut avoir aussi prototype en plus ?

    (70Kb ou 70+40kb ?)

  11. #11
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par FMaz
    J'ai cru voir une fonction $H, est-ce ton framework INTÈGRE prototype ou est-ce qu'il faut avoir aussi prototype en plus ?

    (70Kb ou 70+40kb ?)
    Mon script intègre totalement prototype. Il n'y a pas besoin (et il est même interdit en fait) de relancer le script Prototype.

    Ce fichier remplace donc prototype.js

    Il laisse intacte toutes les fonctions de prototype mais permet d'améliorer celui-ci

  12. #12
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Intéressant, j'aimerais que tu passe me voir en privé, j'ai un projet en objet qui pourrait peut-être bénéficier de ce framework, j'aimerais regarder l'applicabilité avec toi en fait.

  13. #13
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par FMaz
    Intéressant, j'aimerais que tu passe me voir en privé, j'ai un projet en objet qui pourrait peut-être bénéficier de ce framework, j'aimerais regarder l'applicabilité avec toi en fait.
    Que veux-tu dire "en privé" ?

  14. #14
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    +1

  15. #15
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Bah je pensais à une cabinne avec un rideau en fait... non ?

Discussions similaires

  1. [POO] PHP 5 - gestion de la persistance
    Par BRAUKRIS dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2010, 13h34
  2. POO MVC2 et gestion des droits des utilisateurs sur les modèles.
    Par Dankin dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 02/06/2009, 21h26
  3. [POO] Classes de gestion d'un blog
    Par M3hdi dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 09h37
  4. [POO] Adapter un script d'autocompletion pour plusieurs champs texte
    Par tusssss dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/04/2008, 17h18
  5. [POO] Objet et gestion de BDD
    Par hush dans le forum Langage
    Réponses: 9
    Dernier message: 16/06/2007, 11h12

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