mercredi 17 juin 2009
Ces dernières années, on a souvent mis l'accent sur l'écriture de code JavaScript à l'aide de librairies qui nous facilitent la vie (jQuery, Prototype, Mootools). Or, sans dénigrer les bénéfices qu'apportent ces frameworks, ça peut être un avantage de connaître aussi certains des mécanismes internes du langage JavaScript pur.
Voici une de ces particularités que vous ne soupçonniez peut-être pas. En général, vous savez que lorsque vous faites appel à une fonction, on écrit quelque chose de semblable à ceci :
function my_function() {De façon moins évidente, vous pouvez aussi assigner le call d'une fonction à une variable et exécuter le code avec eval().
return 1;
}
alert( my_function() );
var my_fct = 'my_function()';Ou encore par une syntaxe alternative, où "this" fait référence à un élément reconnu à l'intérieur de sa portée (sinon il faut utiliser un closure) :
alert( eval(my_fct) );
this['my_function']();Ce qui nous permet d'être créatif et d'implémenter une queue d'exécution. Les noms des fonctions indiquées dans l'array seront exécutées successivement au moment de l'itération.
// déclaration de fonctionsVoilà, sans même le savoir, vous venez de comprendre une partie des secrets qui font la force des frameworks JavaScript!
function fct1(){ console.log('Fonction 1'); }
function fct2(){ console.log('Fonction 2'); }
function fct3(){ console.log('Fonction 3'); }
function fct4(){ console.log('Fonction 4'); }
function fct5(){ console.log('Fonction 5'); }
// FIFO / FCFS
var queue = new Array('fct1', 'fct2', 'fct3', 'fct4', 'fct5');
for(var i=0 ; i < queue.length ; i++){
this[queue[i]]();
}