Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
793 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Fonction dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction dans une fonction

n°1448647
benjones
Posté le 28-09-2006 à 11:19:32  profilanswer
 

Bonjour !
 
Voila, j'ai un problème.
J'ai une fonction dans la quelle j'ai écrit une sous fonction selon ce modèle :
 
function principale()
{
   ...
   function sous()
   {
      ...
   }
 
   sous();
}
 
Cependant, rien ne se passe et la console Javascript me dit que la fonction "sous" n'est pas définie. Comment cela se fait-il ?
 
Merci

mood
Publicité
Posté le 28-09-2006 à 11:19:32  profilanswer
 

n°1448652
MagicBuzz
Posté le 28-09-2006 à 11:25:39  profilanswer
 

Ca n'exise pas les sous-fonctions.
 
Tu peux passer par le modèle objet, mais c'est pas aussi simple que ça.
 

Code :
  1. function Rectangle(w, h)
  2. {
  3.     // Constructeur
  4.     this.width = w;
  5.     this.height = h;
  6.     // Méthodes
  7.     this.Perimeter = function () {return (this.width + this.height) * 2}
  8.     this.Area = function () {return this.widh * thiw.height}
  9.     this.Diagonal = function () {return Math.Sqrt(Math.Pow(this.width, 2) * Math.Pow(this.height, 2))}
  10. }
  11. var r = new Rectangle(3, 4);
  12. alert(r.Perimeter()); => 14
  13. alert(r.Area()); => 12
  14. alert(r.Diagonal); => 5

n°1448654
benjones
Posté le 28-09-2006 à 11:28:24  profilanswer
 

Pourtant j'avais trouvé une fonction qui permet de changer le curseur et le faire suivre par une image :  
 
function changeCursor()
{
  // On affiche le div de la gomme
  document.getElementById("gomme" ).style.visibility="visible";
   
  // Fonction de détection de mouvement de curseur
  function MousePos(e)
  {
   x = (navigator.appName.substring(0,3) == "Net" ) ? e.pageX : event.x+document.body.scrollLeft;
   y = (navigator.appName.substring(0,3) == "Net" ) ? e.pageY : event.y+document.body.scrollTop;
   document.getElementById("gomme" ).style.top=(y+10);
   document.getElementById("gomme" ).style.left=(x+20);
  }
  if (navigator.appName.substring(0,3) == "Net" ) document.captureEvents(Event.MOUSEMOVE);
  document.onmousemove = MousePos;
}
 
Ce n'est pas de l'objet et ça fonctionne. Quelle est la différence entre cette fonction et la mienne niveau syntaxe ?

n°1448656
MagicBuzz
Posté le 28-09-2006 à 11:35:19  profilanswer
 

tu appelles ta "sous-fonction" à partir de ta fonction.
dans l'exemple, ils reprennent le même système que dans l'objet : les "sous-fonctions" servent à être affectées comme méhodes (ou dans ton exemple, eventhandler) d'un objet.
"document" est bien un objet, et "onmousemove" est le handler de l'event "mousemove" de cet objet.
 
comme tu vois, on ne met pas les () après "MousePos", car on n'exécute pas la fonction, on ne fait que l'associer à onmousemove.

n°1448661
benjones
Posté le 28-09-2006 à 11:44:34  profilanswer
 

Ah, ok, merci beacuoup pour ces eclaircissements.
Je pense pouvoir me débrouiller maintenant.
 
Merci ;)

n°1448687
anapajari
s/travail/glanding on hfr/gs;
Posté le 28-09-2006 à 12:09:18  profilanswer
 

MagicBuzz a écrit :

Ca n'exise pas les sous-fonctions.


Si si :o C'est juste une histoire de namespace, la fonction que tu déclares dans une autre fonction n'est connue qu'à l'intérieur de celle-ci.
Et si c'est dans le cadre d'une conception objet, la fonction en question devient effectivement une methode mais privée.

n°1448691
benjones
Posté le 28-09-2006 à 12:14:26  profilanswer
 

Et bien pourtant j'appelle la sous fonction dans la fonction principae seulement, et elle n'est pas reconnue...

n°1448694
MagicBuzz
Posté le 28-09-2006 à 12:16:01  profilanswer
 

anapajari > je ne suis pas sûr que tu puisses appeler "directement" une fonction déclarée à l'intérieur d'une autre. pour moi il faut toujours passer par une affectation.

n°1448726
anapajari
s/travail/glanding on hfr/gs;
Posté le 28-09-2006 à 13:24:41  profilanswer
 

MagicBuzz a écrit :

anapajari > je ne suis pas sûr que tu puisses appeler "directement" une fonction déclarée à l'intérieur d'une autre. pour moi il faut toujours passer par une affectation.


exemple:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <script type="text/javascript">
  8.   function init(){
  9.     function addNode(parentNode, tagName, content){
  10.       parentNode = document.getElementById(parentNode)||parentNode;
  11.       var node = document.createElement(tagName);
  12.       node.appendChild(document.createTextNode(content));
  13.       parentNode.appendChild(node);
  14.     }
  15.     addNode(document.getElementsByTagName('body')[0], 'div', 'pouet pouet');
  16.   }
  17.   window.onload = init;
  18.   </script>
  19. </head>
  20. <body>
  21. </body>
  22. </html>


 

benjones a écrit :

Et bien pourtant j'appelle la sous fonction dans la fonction principae seulement, et elle n'est pas reconnue...


Dans le code au dessus, tu n'appeles pas la "sous-fonction" dans la fonction mais lorsque l'evenement mousemove se produit sur ton document. néanmoins cela devrait tout de même marcher, par exemple avec le code ci dessus:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <script type="text/javascript">
  8.   function init(){
  9.     function addNode(parentNode, tagName, content){
  10.       parentNode = document.getElementById(parentNode)||parentNode;
  11.       var node = document.createElement(tagName);
  12.       node.appendChild(document.createTextNode(content));
  13.       parentNode.appendChild(node);
  14.     }
  15.     document.onclick = function(e){
  16.       addNode(document.getElementsByTagName('body')[0], 'div', 'pouet pouet');
  17.     }
  18.   }
  19.   window.onload = init;
  20.   </script>
  21. </head>
  22. <body>
  23. </body>
  24. </html>


n°1448773
MagicBuzz
Posté le 28-09-2006 à 14:23:46  profilanswer
 

anapajari > non, regarde son premier post. s'il a réellement saisi ce qu'il a écrit, alors y'a un souci, parcequ'il fait comme tu dis.
 
(ceci dit, bah je vois pas trop l'intérêt d'utiliser des sous-fonctions)

mood
Publicité
Posté le 28-09-2006 à 14:23:46  profilanswer
 

n°1448848
anapajari
s/travail/glanding on hfr/gs;
Posté le 28-09-2006 à 15:11:20  profilanswer
 

si je regarde son premier post, tout me laisse croire qu'il a une erreur dans le code dans sa fonction sous() et que donc le problème ne vient pas de l'utilisation de celle-ci.
edit: et si tu te demandes pourquoi ça fonctionne "aussi" quand on fait

Code :
  1. unNoeud.unEvent = nomDeLaFonction


C'est parce qu'en faisant ça tu attaches à l'event le "code" de la fonction et pas la fonction elle-même. Ce que tu peux contaster à n'importe quel moment en faisant:

Code :
  1. alert(nomDeLaFonction)


 
Les sous fonctions sont utiles si tu as besoin de fonctions portant le même nom dans des namspaces différents [:spamafote]. Encore que personnellement je préfère les mettre dans des "packages" ( en fait des tableaux.


Message édité par anapajari le 28-09-2006 à 15:13:08
n°1448878
MagicBuzz
Posté le 28-09-2006 à 15:44:50  profilanswer
 

=> en réalité, le "unNoeud = nomDeLaFonction", c'est plutôt une affectation d'un pointeur vers la fonction. Le code de la fonction ne s'affiche quand on fait le alert(nomdelafonction) que parceque "ToSource()" est la méthode par défaut associée à ce type de variable ;)

n°1448936
anapajari
s/travail/glanding on hfr/gs;
Posté le 28-09-2006 à 17:19:56  profilanswer
 

ok tu chipottes sur les mots alors que je vulgarisais mais si tu veux ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Fonction dans une fonction

 

Sujets relatifs
[C#.NET] Extraire une image d'une image en fonction d'un rectangle ?Fonction get avec if
[VB6] Probleme avec la fonction inet1.getchunk(1024)probleme avec la fonction ftp_put
Fonction membre en paramètre[PHP] adapter un script en une fonction
Javascript: Fonction en paramètreJ'aimerais modifier légérement cette fonction PHP, un peu d'aide svp
[vaguement résolu] surcharger __getattribute__Fonction Autoopen()
Plus de sujets relatifs à : Fonction dans une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR