Je voudrais créer un décorateur pour stocker une fonction de ce champ dans un tableau pour chaque instance créée d'une classe Je ne peux pas trouver les mots justes pour expliquer donc ici disons que j'ai le code suivant:Javascript Decorators: Comment stocker la fonction avec cette portée?
Je sais que les décorateurs ne sont pas traités pendant l'instanciation de classe.class Foo
{
constructor()
{
this.MyValue = "Foo";
}
@StoreFunction()
TestA()
{
console.log("Foo MyValue:", this.MyValue);
}
}
class Bar extends Foo
{
constructor()
{
this.MyValue = "Bar";
}
@StoreFunction()
TestB()
{
console.log("Bar MyValue:", this.MyValue);
}
}
function StoreFunction()
{
return function(target, key, descriptor)
{
// How would i go about saving the function there so i can call it later??
return descriptor;
}
}
J'ai donc essayé de faire ce qui suit dans StoreFunction.
var StoredFunctions = [];
function StoreFunction()
{
return function(target, key, descriptor)
{
if(target._StoredFunctions)
{
target._StoredFunctions = [];
}
// Save the function's name
target._StoredFunctions.push(key);
return descriptor;
}
}
Puis les lier dans le constructeur.
class Foo
{
constructor()
{
this.MyValue = "Foo";
this.BindFunctions()
}
BindFunctions()
{
if(this._StoredFunctions)
{
this._StoredFunctions.forEach(method => {
StoredFunctions.push(this[method].bind(this));
});
}
}
}
Mais encore une fois, this._StoredFunctions ne stocke pas correctement les StoredFunctions car ils sont statiques. Je ne suis pas sûr de savoir comment le faire fonctionner correctement.
S'il vous plaît laissez-moi savoir si la question n'est pas claire que j'ai du mal à expliquer le problème.
Quel est le résultat final que vous souhaitez obtenir? Je suis particulièrement troublé par l'expression «exposer la fonction», car les méthodes ne sont pas cachées sur les objets, elles n'ont donc pas besoin d'être exposées. –
Lorsque vous dites "exposer la fonction" essayez-vous de les placer dans un tableau globalement accessible "à utiliser pour plus tard"? Pourquoi ne pas simplement utiliser l'objet et sa méthode "plus tard"? – evolutionxbox
Je sais qu'ils ne sont pas des objets cachés. Je voudrais les mettre dans un tableau et les lier aux événements de clavier ou à tout autre événement que je déclenche. Alors disons que je crée une fonction avec ce décorateur alors je peux créer une instance de cette classe et appeler toutes ces fonctions pour chaque instance créée. – Azarus