javascript - script - html title size




Décorateurs sur les fonctions (2)

Je vois que les décorateurs de babel.js (disponibles dans "stage 1") implémentent les spécifications sur https://github.com/wycats/javascript-decorators . Il semble que les décorateurs soient limités à (1) des classes, (2) des accesseurs et (3) des méthodes. Dans mon cas, je veux utiliser des décorateurs sur de vieilles fonctions simples, comme dans

@chainable
function foo() { }

où (juste un exemple)

function chainable(fn) {
  return function() {
    fn.apply(this, arguments);
    return this;
  };
}

Je ne vois aucune raison logique pour laquelle les décorateurs ne devraient pas être en mesure de postuler à des fonctions. Ma question est la suivante: y a-t-il un moyen d'accomplir cela? Ou y a-t-il une bonne raison pour laquelle les fonctions ne peuvent pas être décorées?

Il se trouve qu’un problème est soulevé à cet égard à l’ https://github.com/wycats/javascript-decorators/issues/4 .


Je pense que le problème est fonction décorateur n'a pas été ES7 draft.

Bien sûr, vous pouvez toujours utiliser votre décorateur par vous-même.


Pour exécuter un décorateur, vous évaluez une expression en évitant le hissage (même pour une déclaration de variable, le côté droit d'une affectation reste en place). Par conséquent, il n'est pas compatible avec les déclarations de fonction en cours de levage.

Pour contourner le problème, j'ai suggéré de décorer les expressions de fonction, les expressions de fonction générateur et les fonctions de flèche:

const func = @someDecorator('abc') (x, y) => { return x + y };

Hélas, cela n'a pas suscité beaucoup d'enthousiasme: https://esdiscuss.org/topic/decorators-for-functions





ecmascript-next