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 :

a quoi sert cette fonction ?


Sujet :

JavaScript

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut a quoi sert cette fonction ?
    Bonjour

    Je débute en javascript et je bloque sur la comprehension d'un code.
    voici le code parfaitement fonctionnel d'un diaporama aléatoire.

    Ma question porte sur la fonction objet(), dont je ne comprends pas le rôle.
    Si je la mets en commentaire le diaporama ne fonctionne plus, elle semble donc pas inutile... mais je ne comprends vraiment pas ce qu'elle fait ou pourquoi il faut faire ca.
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
      <title>Ma page</title>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
    <script language="JavaScript">
    <!--
    var nom = new objet ("1", "2", "3", "4", "5", "6");
     
    function objet() {
    this.length = objet.arguments.length
    for (var i = 0; i < this.length; i++) this[i+1] = objet.arguments[i]
    }
     
    function changer() {
    document.image.src = "images2008/"+nom[(parseInt(Math.random()*((nom.length)+1)))]+".jpg";
    setTimeout("changer()", 1000);
    }
    //-->
    </script>
     
    </head>
    <body bgcolor="#000000"  onLoad="changer()">
    <div align="center" >&nbsp;<img src="images2008/1.jpg" width="600" name="image" style="border: 5px solid #ffffff"></div> 
     
    </body>
    </html>
    Merci par avance pour vos explications
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    en fait ça créé uine sorte d'array de base 1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    merci pour la réponse

    Mais à quoi sert cette sorte d'array ?

    le "this", le "arguments" je ne les comprends pas

    et je comprends encore moins que cette fonction objet() serve à quelque chose (le diaporama ne marche pas sans elle) puisque elle est appelée nul part.

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    ben si elle est appelée !
    nom est une instance de objet ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Salut !

    Il pique les yeux ce code...

    En fait, "objet" est une fonction employée comme un constructeur : elle est appelée avec le mot-clé "new". La pratique est très très douteuse selon moi... Une fois dans la fonction "objet" il faut donc penser que tu es dans une méthode (et non plus une fonction volatile). Le "this" fait donc référence à l'objet en cours d'instanciation. La boucle décale les valeurs passées en arguments pour qu'elles soient accessibles à partir de l'index 1 dans l'objet instancié, plutôt que 0 (petit décalage pour que le tableau soit "1-based" plutôt que "0-based"). L'objet a donc, effectivement, une vocation de conteneur.

    Dans le fond, tout ce m###ier produit qqchose de similaire à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [undefined].concat(["1", "2", "3", "4", "5", "6"])
    Autrement, fn.arguments est équivalent à arguments lorsqu'il est évalué dans la fonction fn. Préfixer l'accès avec le nom de la fonction n'est donc, généralement pas utile. Il peut cependant te servir à récupérer les arguments passés à une fonction figurant dans la pile d'appel.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function a(x,y,z) {
        b(x+1,y+1,z+1);
    }
     
    function b(x,y,z) {
        console.log(a.arguments[0], b.arguments[0]);
    }
     
    a(8,16,32); // affiche "8, 9" - utiliser Firebug ou changer pour un alert
    b(8,16,32); // produit une erreur car "a" n'est pas dans la pile d'appels dans ce cas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut

    Pourquoi la taille réelle du tableau devient supérieure au nombre de paramètres ? (Démarrage à index+1... Donc taille+1)

    Et que s'affiche-t-il lorsque la valeur aléatoire est zéro ?

    La classe objet se "transforme" en tableau à partir des paramètres transmis.
    Autant faire plus simple, sans doute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var nom = ["1", "2", "3", "4", "5", "6"];
     
    . . .
     
    ...+ nom[Math.round(Math.random()*(nom.length - 1))] +...

  7. #7
    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 : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben tout simplement parce que l'indice commence à 0 et la taille commence à 1
    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

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Héhéhé...
    Ce que je veux dire c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function objet() {
    this.length = objet.arguments.length // (A)
    for (var i = 0; i < this.length; i++)
             this[i+1] = objet.arguments[i] // (B)
    }
    (A) length = 6, indices = 0 .. 5
    (B) indices = 1 .. 6, plus de zéro.

    Or plus bas on lis "length + 1" et bien sur Math.random() qui va donc sortir une valeur entre 0.0 et 1.0, qu'on multiplie par 7. D'où les hashes 0 et 7 seront immédiatement dans les choux.

    "1 + parseInt(Math.random() * (nom.length - 1))" ça aurait été plus fin. Mwouaif...

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Merci pour vos explications

    Je vois que tous les scripts récupérés sur internet ne sont pas forcément à prendre comme référence
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

Discussions similaires

  1. a quoi sert cette fonction
    Par maizi_oussama dans le forum C++
    Réponses: 3
    Dernier message: 28/02/2011, 09h58
  2. [CognosScript] A quoi sert cette fonction ?
    Par ben_harper dans le forum Cognos
    Réponses: 2
    Dernier message: 23/06/2009, 11h12
  3. A quoi sert cette strucutre
    Par line86 dans le forum C
    Réponses: 6
    Dernier message: 07/05/2007, 14h09
  4. A quoi sert cette fonction
    Par soumia1988 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/03/2007, 13h03
  5. A quoi sert la fonction syscall ??
    Par red210 dans le forum Langage
    Réponses: 1
    Dernier message: 29/03/2006, 22h06

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