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 :

Test de code sur navigateur


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Points : 334
    Points
    334
    Par défaut Test de code sur navigateur
    Bonjour,

    J'ai un souci avec un code contenant 5 "classes". Lorsque je teste ce code sous NetBeans à l'aide du plugin NodeJS le code fonctionne très bien. Par contre, lorsque je le teste dans une page web (avec Firefox ou Chromium) plus rien ne fonctionne.

    Voici le code:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    //shape.js
    (function(global){
     
        function Shape(id, name) {
            this.id = id;
            this.name = name;
            this.nodes = [];
        }
     
        Shape.prototype.setNodes = function(nodes) {
            alert(this.nodes);
            for(var i=0;i<nodes.length;i++) {
                this.nodes.push(nodes[i]);
            }
     
        };
     
        Shape.prototype.ajoutNode = function(node) {
            this.nodes.push(node);
        };
     
        Shape.prototype.getNombreNodes = function() {
            return this.nodes.length;
        };
        Shape.prototype.getName = function() {
            return this.name;
        };
        Shape.prototype.toString = function () {
            return 'id: ' + this.id + ' nom: ' + this.name;
        };
        Shape.prototype.toSvgPath = function() {
            var toSvg='';
            for (var i=0;i<this.nodes.length;i++) {
                if(i===0) {
                    toSvg += 'M ' + this.nodes[i][0] + ' ' + this.nodes[i][1];
                } else {
                    toSvg += ' L ' + this.nodes[i][0] + ' ' + this.nodes[i][1];
                }
            }
            return toSvg;
        };
    })(this);
    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
    24
    25
    26
    27
    //building.js
    "use strict";
    (function () {
        function Building(id, nom) {
            Shape.call(this, id, nom);
        }
        Building.prototype = new Shape(null, null);
        //var forme = new Shape(1, 'truc');
        Building.prototype.toString = function () {
            return Shape.prototype.toString.call(this) + ' aire: ' + this.area;
        };
        Building.prototype.calculAire = function () {
            var area = 0., size = this.nodes.length;
                if( this.nodes.length > 2 ) {
                    for( var i = 0; i < size - 1; i++) {
                        area += (this.nodes[i].x * this.nodes[i+1].y )-( this.nodes[i + 1].x * this.nodes[i].y);
                    }
                }
                this.area = Math.abs(area / 2);
        };
        Building.prototype.getArea = function() {
                return this.area;
            };
        Building.prototype.setArea = function(aire) {
            this.area = aire;
        };
    }(this));
    Le code de test sous NetBeans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var a = new Shape(1, 'dfsfd');
    console.log(a.toString());
     
    var nouvelleShape = new Building(1, 'abc', 'fdsdf');
    nouvelleShape.setNodes([[23,45],[3,5],[12,0]]);
    console.log(nouvelleShape.toSvgPath());
    Le code de test sur navigateur:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        </head>
        <body>
            <div id="truc">sdfsd</div>
            <script src="JS/Objets/shape.js"></script>
            <script src="JS/Objets/road.js"></script>
            <script src="JS/Objets/building.js"></script>
            <script src="JS/Objets/amenity.js"></script>
            <script src="JS/Objets/natural.js"></script>
            <script>
                var nouvelleShape = new Shape(1, 'abc');
                alert(nouvelleShape.toString());
                nouvelleShape.setNodes([[23,45],[3,5],[12,0]]);
                var nouvelleRoute = new Road(2, 'route truc', 'autoroute'); //road.create('route truc', 'autoroute');
     
                var contenu = document.getElementById('truc');
                alert(contenu.innerHTML);
                if(contenu!==undefined) {
                    contenu.innerHTML = nouvelleShape.toString();
                    contenu.innerHTML += '<br />' + nouvelleShape.tailleNodes();
                    contenu.innerHTML += '<br />' + nouvelleShape.toSvgPath();
                    contenu.innerHTML += '<br />' + nouvelleRoute.toString();
                }
            </script>
        </body>
     
    </html>
    Le premier alert() ne fonctionne pas. Le new Shape() ne fonctionne donc pas.

    Merci d'avance pour votre aide. N'hésitez pas à me signaler des choses illogiques, c'est la première fois que j'utilise les prototypes.

  2. #2
    Membre averti
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Points : 334
    Points
    334
    Par défaut
    Bon à priori j'ai trouvé, le problème était que j'ai entouré mon code de closures.

  3. #3
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Tout à fait, les closures isolent le scope de tes classes donc impossible de les utiliser dans un autre script. Il te faut les rattacher à un contexte global, par exemple en écrivant

  4. #4
    Membre averti
    Inscrit en
    Juin 2011
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2011
    Messages : 258
    Points : 334
    Points
    334
    Par défaut
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Wamp] probleme Wamp server lorsque je teste un site sur deux différents navigateurs
    Par cktri2 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 21/02/2014, 15h01
  2. Test de code VBA sur différentes versions d'Excel
    Par Fala fala dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2008, 11h33
  3. Tester son code sur divers navigateurs
    Par benassis dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 22/03/2006, 13h12
  4. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 16h03
  5. Conseils code sur diagonalisation de matrice et autre
    Par Math75 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/02/2005, 14h12

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