Maison  >  Article  >  interface Web  >  Pouvez-vous nommer dynamiquement des fonctions JavaScript sans utiliser « eval » ou des fonctionnalités non standard ?

Pouvez-vous nommer dynamiquement des fonctions JavaScript sans utiliser « eval » ou des fonctionnalités non standard ?

DDD
DDDoriginal
2024-11-17 11:08:01576parcourir

Can You Dynamically Name JavaScript Functions Without Using `eval` or Non-Standard Features?

Création de fonctions avec des noms dynamiques en JavaScript

Peut-on attribuer dynamiquement de vrais noms à des fonctions sans recourir à des fonctionnalités d'évaluation ou JavaScript non standard ? Cette question se pose lors de la recherche de fonctions avec des noms identifiables dans des contextes de débogage.

Solution pour ECMAScript 2015 et versions ultérieures (ES6)

ES2015 introduit une solution. L'attribution d'une expression de fonction anonyme à une propriété d'objet donne à la fonction le nom de cette propriété. Ceci, combiné aux noms de propriétés calculés, permet de nommer des fonctions sans s'appuyer sur des constructeurs de fonctions ou des évaluations.

Dans ES2015, l'extrait de code suivant crée une fonction avec un nom dynamique :

const dynamicName = "foo" + Math.floor(Math.random() * 1000);
const obj = {
    [dynamicName]() {
        throw new Error();
    },
};
const f = obj[dynamicName];

Le le nom de la fonction peut être récupéré via sa propriété name ou observé dans les traces de la pile d'erreurs :

console.log("Function's `name` property: " + f.name + " (see compatibility note)");

try {
    f();
} catch (e) {
    console.log(e.stack);
}

Notez que certains navigateurs peuvent ne pas afficher le nom dans les traces de pile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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