11548 sujets
Bonsoir à toutes et à tous,
@ Jules-F : si j'ai bien compris, mettre analyse sans les parenthèses, c'est faire une déclaration au même titre que function () { ... }. Inversement, si j'écris analyse () avec les parenthèses, je fais appel à la fonction et elle se doit d'être déclaré avant !
Or j'avais tendance à écrire l'appel à ma fonction de cette façon :
Merci pour l'astuce sur la couleur. Effectivement c'est bien plus simple à utiliser.
@+
Modifié par Artemus24 (16 May 2012 - 03:16)
@ Jules-F : si j'ai bien compris, mettre analyse sans les parenthèses, c'est faire une déclaration au même titre que function () { ... }. Inversement, si j'écris analyse () avec les parenthèses, je fais appel à la fonction et elle se doit d'être déclaré avant !
Or j'avais tendance à écrire l'appel à ma fonction de cette façon :
window.onload = function () { analyse(); }
alors que la bonne écriture était :window.onload = analyse;
Bien sûr, le plus judicieux est de procédé selon la déclaration suivante :window.onload = function () { /* code de la fonction analyse */ }
Merci pour l'astuce sur la couleur. Effectivement c'est bien plus simple à utiliser.
@+
Modifié par Artemus24 (16 May 2012 - 03:16)
a écrit :
si j'ai bien compris, mettre analyse sans les parenthèses, c'est faire une déclaration au même titre que function () { ... }.
L’effet est le même oui mais dans le premier cas on ne peut pas parler d’une déclaration dans le sens de la programmation. Mis à part un bète « passage de paramètre » je ne vois pas d’autres termes qui colleraient mieux.
a écrit :
Inversement, si j'écris analyse () avec les parenthèses, je fais appel à la fonction et elle se doit d'être déclaré avant !
Oui, mais elle peut également être déclaré après. Il y a une étape de parsing du code de la part du navigateur avant execution donc même déclarée après, il retrouvera la fonction (mais il faut faire attention à la portée des fonctions).
Tes trois exemples de code auront le même résultat effectivement.
Personnellement, je ne trouve pas forcement l’un meilleur que l’autre, j’ai tendance à utiliser le premier pour facilement rajouter des appels de fonction et des tests.
Bon quelques autres remarques concernant les fonctions que tu pourrais croiser :
Quand tu déclares une fonction de base, elle est attaché à l’objet window.
function analyse() {
// Code…
}
window.analyse();
Tu peux ainsi surcharger les fonctions de base (genre alert par exemple).Il est egalement possible d’executer une fonction directement après sa déclaration avec une syntaxe du genre :
(function analyse() {
// Code …
})();
C’est utilisé dans jQuery et bien ailleurs. Mais attention, c’est pas un équivalent du onload puisque ça n’attend pas le chargement de la page ou du DOM.
Modifié par Jules-F (16 May 2012 - 08:54)
@Artemus24 : il faut créer un nouveau sujet pour chacune de tes questions. Le fonctionnement du forum est basé sur ce principe. Cela permet notamment aux personnes qui font des recherches de facilement trouver les problèmes similaires au leur et déjà traités.
Modifié par Julien Royer (16 May 2012 - 10:50)
Modifié par Julien Royer (16 May 2012 - 10:50)
Bonjour à toutes et à tous,
@ Julien Royer : je suppose que tu parles de ma seconde question concernant les couleurs ?
En faite, mon sujet traite de la bonne façon de présenter le code jquery. Je m'attarde plus sur les fonctions car elles sont le cœur même du développement javascript et du jquery.
Dès que j'ai fini avec les fonctions , je clôture ce sujet.
@ Tous : ce qui me dérange le plus, c'est la multitude des écritures d'une fonction à l'inverse de ce que je connais en C ou en C++. A la longue, c'est déroutant.
Je viens de faire un test très simple :
. Est-ce à dire que ce genre de déclaration (window.onload = analyse;) ne permet pas de faire un passage de paramètres classique et qu'en plus, le paramètre que je reçois, pour cause que je suis sur un évènement (onload), ne peut être que l'objet event ?
Donc pour gérer les propriétés d'un évènement, je suis obligé d'une part de faire ce style de déclaration et d'autre part, je ne peux avoir d'autres paramètres que l'object event.
Est-ce bien cela ?
@+
Modifié par Artemus24 (17 May 2012 - 02:55)
@ Julien Royer : je suppose que tu parles de ma seconde question concernant les couleurs ?
En faite, mon sujet traite de la bonne façon de présenter le code jquery. Je m'attarde plus sur les fonctions car elles sont le cœur même du développement javascript et du jquery.
Dès que j'ai fini avec les fonctions , je clôture ce sujet.
@ Tous : ce qui me dérange le plus, c'est la multitude des écritures d'une fonction à l'inverse de ce que je connais en C ou en C++. A la longue, c'est déroutant.
Je viens de faire un test très simple :
function analyse(param) { alert(param); }
window.onload = analyse;
et à ma grande surprise, l'affichage du paramètre me donne object 
Donc pour gérer les propriétés d'un évènement, je suis obligé d'une part de faire ce style de déclaration et d'autre part, je ne peux avoir d'autres paramètres que l'object event.
Est-ce bien cela ?
@+
Modifié par Artemus24 (17 May 2012 - 02:55)
a écrit :
et à ma grande surprise, l'affichage du paramètre me donne object event . Est-ce à dire que ce genre de déclaration (window.onload = analyse;) ne permet pas de faire un passage de paramètres classique et qu'en plus, le paramètre que je reçois, pour cause que je suis sur un évènement (onload), ne peut être que l'objet event ?
Utilise la fonction apply()... Et une IIFE probablement.
Qui plus est, utilise le mot clé "arguments" pour connaître tous les paramètres passés à ta fonction. Et aussi, notons que window.onload n'est pas standard.

Bonsoir à toutes et à tous,
@ vaxilart : merci pour toutes ces précisions. Je ne connaissais pas la fonction apply().
@ tous : je complète mes réflexions sur les fonctions par ma mauvaise maitrise du mot clé "this". J'ai toujours cru que ce mot désignait l'adresse de ma fonction, même si par l'usage d'un autre mot clé "new", elle change de nom.
Je me suis créé un objet contenant différentes propriétés et méthodes comme ci-après :
Tout ce passe comme si la méthode init était à l'extérieur de l'objet modele.
Par contre, si je fais modele.affiche(); je n'ai plus aucun problème d'accès.
A quoi est-ce dû ?
@+
Modifié par Artemus24 (29 May 2012 - 23:54)
@ vaxilart : merci pour toutes ces précisions. Je ne connaissais pas la fonction apply().
@ tous : je complète mes réflexions sur les fonctions par ma mauvaise maitrise du mot clé "this". J'ai toujours cru que ce mot désignait l'adresse de ma fonction, même si par l'usage d'un autre mot clé "new", elle change de nom.
Je me suis créé un objet contenant différentes propriétés et méthodes comme ci-après :
modele = {
quant: 0,
rang: 0,
affiche: function () {
document.getElementById("zone").innerHTML = "<div>" + this.quant + " --- " + this.rang + "</div>";
},
init: function (quant, rang) {
this.quant = quant;
this.rang = rang;
this.affiche();
}
};
Lorsque je fais appel à la méthode init, je n'ai aucun problème. Mais je ne sais pour quelle raison, il ne trouve pas la méthode affiche ?Tout ce passe comme si la méthode init était à l'extérieur de l'objet modele.
Par contre, si je fais modele.affiche(); je n'ai plus aucun problème d'accès.
A quoi est-ce dû ?
@+
Modifié par Artemus24 (29 May 2012 - 23:54)
Bonjour jb_gfx,
dans un objet, je déclare des propriétés et des méthodes.
A partir d'une méthode, celle que je nomme init, j'effectue par exemple un affichage, en appelant la méthode, qui se trouve dans le même objet, selon la déclaration suivante :
Et je ne sais pas pourquoi, il m'arrive des fois que cela fonctionne correctement et des fois, il ne trouve pas la méthode affiche. Je suis obligé de mettre alors :
Peux-tu m'expliquer où se trouve mon erreur dans l'usage que je fais du this ?
@+
Modifié par Artemus24 (28 May 2012 - 18:55)
dans un objet, je déclare des propriétés et des méthodes.
A partir d'une méthode, celle que je nomme init, j'effectue par exemple un affichage, en appelant la méthode, qui se trouve dans le même objet, selon la déclaration suivante :
init: function () {
...
this.affiche();
...
},
Or j'accède à la méthode init par la déclaration suivante :object.init();
Et je ne sais pas pourquoi, il m'arrive des fois que cela fonctionne correctement et des fois, il ne trouve pas la méthode affiche. Je suis obligé de mettre alors :
window.object.init();
pour accéder correctement à la méthode affiche.Peux-tu m'expliquer où se trouve mon erreur dans l'usage que je fais du this ?
@+
Modifié par Artemus24 (28 May 2012 - 18:55)
Bonjour,
Il va falloir t'acheter un bon bouquin ou lire des ressources de qualité sur le Web. L'objet vers lequel pointe this est uniquement défini par le contexte d'appel de la fonction. Ainsi, si j'écris window.onload = modele.init; et que le moteur d'exécution de scripts appelle ensuite window.onload(), this pointera vers window et non pas vers modele.
Regarde du côté des mots-clés donnés par Vaxilart.
Il va falloir t'acheter un bon bouquin ou lire des ressources de qualité sur le Web. L'objet vers lequel pointe this est uniquement défini par le contexte d'appel de la fonction. Ainsi, si j'écris window.onload = modele.init; et que le moteur d'exécution de scripts appelle ensuite window.onload(), this pointera vers window et non pas vers modele.
Regarde du côté des mots-clés donnés par Vaxilart.
Bonjour Julien Royer,
c'est exactement ce genre de problème que j'ai, lors de l'appel d'une méthode.
Je possède plusieurs bouquins sur le Javascript, mais ils ne sont pas très explicites sur ce sujet.
J'avais compris ultérieurement que le problème venait du contexte de l'appel de la méthode (comme tu le soulignes) mais je ne savais pas toujours le résoudre.
J'ai déjà fait des recherches mais sans succès !
Si tu as une piste, je suis preneur !
Merci.
@+
c'est exactement ce genre de problème que j'ai, lors de l'appel d'une méthode.
Je possède plusieurs bouquins sur le Javascript, mais ils ne sont pas très explicites sur ce sujet.
J'avais compris ultérieurement que le problème venait du contexte de l'appel de la méthode (comme tu le soulignes) mais je ne savais pas toujours le résoudre.
J'ai déjà fait des recherches mais sans succès !
Si tu as une piste, je suis preneur !
Merci.
@+
La doc js de mozilla est une des meilleures ressources sur le sujet : this
paolo a écrit :
La doc js de mozilla est une des meilleures ressources sur le sujet : this
Effectivement, très bonne explication.