support es6 ecmascript decorators decoradores compatible browsers javascript babeljs decorator ecmascript-next

es6 - javascript decorators



Decoradores en funciones (3)

Veo que los decoradores de babel.js (disponibles en "etapa 1") implementan la especificación en https://github.com/wycats/javascript-decorators . Parece que los decoradores están limitados a (1) clases, (2) accesorios y (3) métodos. En mi caso, quiero usar decoradores en viejas funciones simples, como en

@chainable function foo() { }

donde (solo un ejemplo)

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

No veo ninguna razón lógica por la que los decoradores no puedan aplicarse a las funciones. Mi pregunta es, ¿hay alguna manera de lograr esto? ¿O hay alguna buena razón por la cual las funciones no pueden decorarse?

Resulta que hay un problema planteado para esto en https://github.com/wycats/javascript-decorators/issues/4 .



Creo que el problema es que el decorador de funciones no ha sido borrador de ES7.

Por supuesto, aún puede implementar su decorador de funciones usted mismo


Para ejecutar un decorador, se evalúa una expresión y eso impide que se levante (incluso para una declaración de variable, el lado derecho de una tarea permanece fijo). Por lo tanto, no es compatible con las declaraciones de funciones que se están izando.

Como solución alternativa, sugerí que las expresiones de función, las expresiones de función del generador y las funciones de flecha se puedan habilitar para decorar:

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

Por desgracia, eso no fue recibido con mucho entusiasmo: https://esdiscuss.org/topic/decorators-for-functions