Maison >interface Web >js tutoriel >Introduction à la métaprogrammation DSL dans les compétences JavaScript_javascript

Introduction à la métaprogrammation DSL dans les compétences JavaScript_javascript

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBoriginal
2016-05-16 16:09:262229parcourir

Quand j'ai regardé le code source du modèle JavaScript, j'ai trouvé une utilisation très intéressante pour générer des fonctions, je me suis dit, n'est-ce pas de la métaprogrammation ?

.

Métaprogrammation JavaScript

Copier le code Le code est le suivant :

La métaprogrammation fait référence à l'écriture de certains types de programmes informatiques qui écrivent ou manipulent d'autres programmes (ou eux-mêmes) en tant que données, ou effectuent un travail au moment de l'exécution qui devrait être terminé au moment de la compilation.

Évaluation JavaScript

Copier le code Le code est le suivant :

La fonction eval() évalue une chaîne et exécute le code JavaScript qu'elle contient.

Il peut être utilisé comme suit :
Copier le code Le code est le suivant :

eval("x=10;y=20;document.write(x*y)")

Bien sûr, cela n'est utilisé que pour exécuter une certaine fonction, mais ce produit est très rentable et sujet aux erreurs.
Copier le code Le code est le suivant :

La fonction d'évaluation doit être évitée autant que possible.

Une meilleure façon est donc d'utiliser New Function()

La grande différence entre l'utilisation de New Function() et eval() est que eval n'est pas qu'une fonction,

Copier le code Le code est le suivant :

eval() évalue une chaîne en tant qu'expression JavaScript dans la portée d'exécution actuelle et peut accéder aux variables locales. New Function() analyse une chaîne qui y est stockée en un objet fonction qui peut ensuite être appelé par du code JavaScript. Étant donné que le code s'exécute dans une portée distincte, les variables locales ne sont pas accessibles.

En d'autres termes, eval() interférera avec la portée de la fonction actuelle. .

Nouvelle fonction JavaScript()

Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction (fonction) est en fait un objet Function. L'objet Function généré à l'aide du constructeur Function est analysé lors de la création de la fonction. C'est moins efficace que si vous déclarez une fonction et l'appelez dans votre code, car les fonctions déclarées à l'aide d'instructions de fonction sont analysées avec d'autres instructions.

New Function() sera moins efficace en comparaison, et c'est ce que nous pouvons prédire dans la situation actuelle.

Un exemple simple ressemble à ceci :

Copier le code Le code est le suivant :

var add = new Function(['x', 'y'], 'return x y');

new Function() analysera la chaîne en une fonction. . Ensuite, nous pouvons l'exécuter via apply
Copier le code Le code est le suivant :

Function.apply(null, args)

Et voici ce que je vois dans le modèle JavaScript :
Copier le code Le code est le suivant :

nouvelle fonction (
         tmpl.arg ',tmpl',
"var _e=tmpl.encode" tmpl.helper ",_s='"
        str.replace(tmpl.regexp, tmpl.func)
"';return _s;"
);

Bien sûr, nous avons d'autres méthodes.
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn