Maison > interface Web > js tutoriel > le corps du texte

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

WBOY
Libérer: 2016-05-16 16:09:26
original
2166 Les gens l'ont consulté

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.
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal