Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Tous les langages proposent des fonctions natives ou prédéfinies c'est à dire prêtes à l'emploi.
Dans tous les langages le développeur peut créer ses propres fonctions ou fonctions personnelles.
Il ne faut pas confondre fonctions génériques et méthodes.
Nous avons déjà utilisé dans nos scripts : parseInt(), parseFloat(), isNaN().
Ce sont des fonctions natives JavaScript.
Les fonctions natives et génériques sont peu nombreuses en JS par contre le nombre de méthodes est impressionnant.
Ne confondez pas fonction et méthode.
Une méthode est une fonction particulière associée à un objet ou une classe.
Une fonction n'est pas liée à un objet ou une classe.
Une fonction est appelée directement en utilisant son nom.
La syntaxe est : nomFonction(paramètre1, paramètre2, ...)
Une méthode est appelée en utilisant la syntaxe : objet.methode(paramètres)
Par exemple, vous pouvez appliquer à un objet de type String les méthodes trim(), toUpperCase(), toLowerCase() etc.
(et seulement à une chaine).
JavaScript propose aussi des méthodes pour les dates, les 'arrays', les 'maps', les 'sets', etc.
Tout un chapitre est consacré aux objets natifs de JS et leurs méthodes :
les objets natifs de JS
Dans le chapitre 9 vous apprendrez à créez vos propres objets avec leurs propriétés et méthodes :
Créer ses propres objets
Tapez les commandes suivantes dans la console !
>unechaine =" aAbBcCdD "
' aAbBcCdD '
>typeof unechaine
'string'
>unechaine.toLowerCase()
' aabbccdd '
>unechaine.toUpperCase()
' AABBCCDD '
>parseInt(100.25)
100
>parseInt("100.25")
100
>unnombre =1234.565789
1234.565789
>unnombre.trim()
... unnombre.trim is not a function
J'applique les méthodes .toUpperCase() & .toLowerCase() à un objet de type String : la variable "unechaine".
Notez la syntaxe : objetString.méthode(). C'est ce qu'on appelle la notation pointée.
Si je tente d'appliquer la méthode trim() à un nombre, j'ai une erreur !
Par contre je peux appliquer la fonction ParseInt() à un nombre mais aussi à une chaine (si cette chaine
est au format numérique).
Attention typeof n'est pas une fonction mais un opérateur.
J'utilise dans le code HTML des attributs événementiels pour appeler à chaque fois la fonction "fcouleur()".
Pour cibler dans le script un élément HTML j'utilise les nouvelles méthodes de l'objet document : querySelector() &
querySelectorAll().
Ces deux méthodes acceptent comme argument un sélecteur CSS.
Notre code est tout à fait correct mais présente un inconvénient majeur : encore des "scories JS" dans le code HTML.
Non seulement je vais utiliser des fonctons anonymes mais de plus je vais centraliser tout le code JS dans le
conteneur SCRIPT.
La détection des évènements va se faire via le JavaScript (et non plus via HTML).
En d'autres termes j'abandonne le gestionnaire d'évènements HTML pour le gestionnaire d'évènements JS.
Plus aucune trace de code JS dans le code HTML. Notez que j'ai affecté à chaque bouton un ID ...
Tout le code JS est regroupé dans le conteneur SCRIPT.
let titre = document.querySelector('h1') ;
let texte = document.querySelector('p') ;
document.querySelector('#vert').onclick = function()
{titre.style.color = 'green'; texte.style.color = 'green'; }
document.querySelector('#rouge').onclick = function()
{ titre.style.color = 'red'; texte.style.color = 'red'; }
document.querySelector('#bleu').onclick = function()
{ titre.style.color = 'blue'; texte.style.color = 'blue'; }
J'utilise désormais le gestionnaire d'évènements de JS.
Grâce à la centralisation du code JS, La lisibilité de celui-ci est facilitée.
Pour en savoir plus sur la gestion des évènements en JS : Les évènements
Étudions plus en détail la première fonction anonyme : appelée par un clic
document.querySelector('#vert').onclick = function() : si clic sur le bouton identifié "vert" appel
de cette fonction anonyme.
Vous pouvez trouver que le script ci-dessus est un peu lourd.
Il le serait encore davantage si au lieu de modifier le style de deux éléments HTML, il s'agissait d'en modifier 6 ...
Il serait plus pertinent que chaque fonction anonyme appelle à son tour la même fonction nommée.
Désormais il y un titre et trois éléments de type P. Donc le script doit modifier désormais le DOM pour 4 éléments (et non plus 2) !
// les fonctions anonymes :
document.querySelector('#vert').onclick = function() {changer_couleur('green'); }
document.querySelector('#rouge').onclick = function() {changer_couleur('red');}
document.querySelector('#bleu').onclick = function() {changer_couleur('blue'); }
// fonction nommée appelée par l'une des fonctions anonymes :
function changer_couleur(couleur)
{
document.querySelector('h1').style.color = couleur ;
document.querySelector('p').style.color = couleur;
document.querySelectorAll('p')[1].style.color = couleur ;
document.querySelectorAll('p')[2].style.color = couleur ;
} // fin fonction
Chaque bouton appelle une fonction anonyme.
Chaque fonction anonyme appelle la fonction nommée "changer_couleur()" avec passage en argument de la couleur retenue.
Ici la fonction "changer_couleur()" permet de modifier le style de quatre balises (H1 et 3 éléments P). Si je voulais changer 6 éléments du DOM il suffirait de rajouter 2 instructions dans la fonction nommée.
Les fonctions anonymes peuvent s'autoexécuter dans le cadre d'un minuteur ('timer').
Pour créer un 'timer' il faut faire appel aux méthodes (de l'objet window) : setInteval()/setTimeout().
let stop = setInterval ... : lorsque vous utilisez setInterval() cette méthode renvoie un identifiant
unique que vous devez stocker dans une variable.
... onclick ="clearInterval(stop) : utilisez la méthode clearInterval() argumentée avec cette variable
pour arrêter l'exécution périodique.
La méthode setInterval() exécute la fonction anonyme chaque seconde.
Cliquez sur le bouton de commande pour cesser l'incrémentation.
Ces fonctions retournent un 'array' donc plusieurs valeurs.
function mon_script()
{
function fcercle(rayon)
{
let aire = Math.round(rayon * rayon * 3.14);
let circonference = Math.round(rayon * 2 * 3.14) ;
let tab =[aire, circonference];
return tab; // retourne un tableau de 2 éléments
}
let rayon =parseInt(prompt("saisir le rayon du cercle !"));
let tableau =fcercle(rayon); //appel de la fonction fcercle
document.write("aire : " + tableau[0]);
document.write("circonférence : " + tableau[1]);
} // fin mon_script
Étudiez bien la fonction. Elle retourne un 'array' avec deux valeurs.
Donc lors de l'appel de fonction la variable d'affectation "tableau" est donc un tableau indicé avec deux éléments ;
Le premier élément contient l'aire et le deuxième la circonférence.
Math.round(expression) : méthode de l'objet Math pour arrondir à l'entier le plus proche.
Précédemment je vous ai montré comment rendre la saisie d'un ou plusieurs argmuents optionnels en proposant pour ces paramètres une valeur par défaut. Mais il y a mieux encore : fonction qui accepte 2 ou 3 ou 4 ou N arguments lors de son appel.
Thème : créer une fonction qui cumule un nombre variable d'entiers : 2 ou 3 ou 4 ou 5 ou N ... Donc le nombre d'arguments à saisir lors de l'appel de la fonction est variable.
function mon_script()
{
function fsomme(...tab)
{
let cumul = 0;
for (let valeur of tab)
{cumul+=valeur ;}
return cumul;
} // fin fsomme
// appels fonction
let cumul1 = fsomme(10,10,30);
let cumul2 = fsomme(1,2,3,4);
let cumul3 = fsomme(1000,2000);
console.log(cumul1);
console.log(cumul2);
console.log(cumul3);
} // fin mon_script
Dans cette fonction, "tab" est un tableau indicé.
Dans la parenthèse ; le nom de l'objet 'array' doit être précédé de trois points.
Notez les différents appels de la fonction avec 3 puis 4 et enfin 2 arguments.
Vous voyez apparaitre dans la console : 50 puis 10 puis 3000.
Avec la dernière version de ECMAScript, il est possible de définir des fonctions avec une syntaxe très simple :
la déclaration de la fonction tient en une instruction.
Thème : créer une fonction qui fait la sommme de deux nombres et multiplie le tout par un troisième nombre.
function mon_script()
{
let x =10, y = 12, z = 13; w = 14;
// ci-dessous fonction nommmée standard
let fstandard = function(n1,n2,n3)
{ return (n1 + n2) * n3; };
// fonction anonyme fléchée
let fflechee = (n1,n2,n3) => (n1 + n2) * n3;
document.write("
appel fonction standard : " + fstandard(x,y,z));
document.write("
appel fonction fléchée : " + fflechee(x,y,z));
...
Les fonctions fstandard & fflechee font exactement la même chose.
La première a une syntaxe standard alors que la seconde a un syntaxe simplifiée dite "fléchée".
Dans cette syntaxe simplifiée le mot "function" disparait ; le mot "return" est remplacé par une flèche d'où l'expression
"fonction fléchée".