Objet Function ECMAScript (classe)
- Page précédente Objet arguments
- Page suivante Fermeture (closure)
Les fonctions d'ECMAScript sont en réalité des objets complets.
Objet (classe) Function
Ce qui peut être le plus intéressant dans ECMAScript, c'est que les fonctions sont en réalité des objets complets.
La classe Function peut représenter toute fonction définie par le développeur.
La syntaxe pour créer une fonction directement avec la classe Function est la suivante :
var function_name = new function(arg1, arg2, ... , argN, function_body)
Dans cette forme, chaque arg Tous ont un paramètre, le dernier paramètre est le corps de la fonction (le code à exécuter). Ces paramètres doivent être des chaînes.
Souvenez-vous de cette fonction ?
function sayHi(sName, sMessage) { alert("Hello " + sName + sMessage); }
On peut également le définir ainsi :
var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");
Bien que cette forme soit quelque peu difficile à écrire en raison des chaînes, elle aide à comprendre que les fonctions ne sont qu'un type de référence, leurs comportements sont les mêmes que ceux des fonctions créées explicitement avec Function.
Veuillez voir l'exemple suivant :
function doAdd(iNum) { alert(iNum + 20); } function doAdd(iNum) { alert(iNum + 10); } doAdd(10); //Sortie "20"
Comme vous le savez, la deuxième fonction surcharge la première, de sorte que doAdd(10) sort "20" au lieu de "30".
Si vous rewritez ce bloc de code sous cette forme, le concept est plus clair :
var doAdd = new Function("iNum", "alert(iNum + 20)"); var doAdd = new Function("iNum", "alert(iNum + 10)"); doAdd(10);
Veuillez observer ce morceau de code, il est évident que la valeur de doAdd a été modifiée pour pointer vers un objet différent. Le nom de la fonction est simplement une référence vers l'objet de la fonction, agissant comme d'autres objets. Même si deux variables peuvent pointer vers la même fonction :
var doAdd = new Function("iNum", "alert(iNum + 10)"); var alsodoAdd = doAdd; doAdd(10); //Sortie "20" alsodoAdd(10); //Sortie "20"
Ici, la variable doAdd est définie comme une fonction, puis alsodoAdd est déclarée comme un pointeur vers la même fonction. Les deux variables peuvent exécuter le code de la fonction et obtenir le même résultat - "20". Par conséquent, si le nom de la fonction ne fait que pointer vers la fonction, peut-on passer la fonction en tant que paramètre à une autre fonction ? La réponse est affirmative !
function callAnotherFunc(fnFunction, vArgument) { fnFunction(vArgument); } var doAdd = new Function("iNum", "alert(iNum + 10)"); callAnotherFunc(doAdd, 10); //Affiche "20"
Dans l'exemple ci-dessus, callAnotherFunc() a deux paramètres - la fonction à appeler et les paramètres à transmettre à la fonction. Ce code transmet doAdd() à la fonction callAnotherFunc(), avec un paramètre de 10, et affiche "20".
Note :Bien que l'on puisse utiliser le constructeur Function pour créer des fonctions, il est préférable de ne pas l'utiliser, car cela rend la définition de la fonction beaucoup plus lente que les méthodes traditionnelles. Cependant, toutes les fonctions doivent être considérées comme des instances de la classe Function.
L'attribut length de l'objet Function
Comme mentionné précédemment, les fonctions appartiennent aux types de données de référence, donc elles ont également des attributs et des méthodes.
L'attribut length défini par ECMAScript déclare le nombre de paramètres attendus par la fonction. Par exemple :
function doAdd(iNum) { alert(iNum + 10); } function sayHi() { alert("Hi"); } alert(doAdd.length); //Affiche "1" alert(sayHi.length); //Affiche "0"
La fonction doAdd() définit un paramètre, donc son length est 1 ; sayHi() ne définit pas de paramètres, donc son length est 0.
Rappelez-vous que, peu importe le nombre de paramètres définis, ECMAScript peut accepter un nombre quelconque de paramètres (jusqu'à 25), ce qui a été expliqué dans le chapitre "Aperçu des fonctions". L'attribut length est simplement un moyen pratique de voir le nombre de paramètres attendus par défaut.
Méthodes de l'objet Function
L'objet Function a également les méthodes valueOf() et toString() partagées avec tous les objets. Ces deux méthodes retournent toutes deux le code source de la fonction, ce qui est particulièrement utile lors du débogage. Par exemple :
function doAdd(iNum) { alert(iNum + 10); } document.write(doAdd.toString());
Le code ci-dessus affiche le texte de la fonction doAdd().Essayer personnellement!
- Page précédente Objet arguments
- Page suivante Fermeture (closure)