113 votes

Nom de la fonction dynamique en javascript ?

J'ai ceci:

 this.f = function instance(){};

j'aimerais avoir ça :

 this.f = function ["instance:" + a](){};

141voto

Marcosc Points 665

Cela le fera essentiellement au niveau le plus simple :

 "use strict";
var name = "foo";
var func = new Function(
     "return function " + name + "(){ alert('sweet!')}"
)();

//call it, to test it
func();

Si vous voulez plus de fantaisie, j'ai écrit un article sur " Les noms de fonctions dynamiques en JavaScript ".

60voto

Darren Points 381

Vous pouvez utiliser Object.defineProperty comme indiqué dans la référence JavaScript MDN :

 var myName = "myName";
var f = function () { return true; };
Object.defineProperty(f, 'name', {value: myName, writable: false});

53voto

kybernetikos Points 3127

Dans les moteurs récents, vous pouvez faire

 function nameFunction(name, body) {
  return {[name](...args) {return body(...args)}}[name]
}



const x = nameFunction("wonderful function", (p) => p*2)
console.log(x(9)) // => 18
console.log(x.name) // => "wonderful function"

12voto

Valipour Points 7333

mettre à jour

Comme d'autres l'ont mentionné, ce n'est pas la solution la plus rapide ni la plus recommandée. La solution de Marcosc ci -dessous est la voie à suivre.

Vous pouvez utiliser eval :

 var code = "this.f = function " + instance + "() {...}";
eval(code);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X