Se pueden aplicar m煤ltiples decoradores a una declaraci贸n, por ejemplo en una sola l铆nea:
@f @g x
O en l铆neas m煤ltiples:
@f
@g
x
Cuando m煤ltiples decoradores se aplican a una declaraci贸n sencilla, su valor es similar a una funci贸n de composici贸n en Matem谩ticas. En este modelo las funciones f
y g
, el resultado de la composici贸n es (f * g)(x)
es equivalente a f(g(x))
.
Por ello, la forma en la que se eval煤an los decoradores es la siguiente:
- La expresi贸n para cada decorador es evaluada de arriba hacia abajo.
- Los resultados son entonces invocados como funciones de abajo hacia arriba.
Si vamos a utilizar fabricas de decoradores, podemos observar el orden de esta evaluaci贸n con el siguiente ejemplo.
function f1() {
console.log('f1 evaluada')
return function (
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
console.log('f1 ejecutada')
}
}
function f2() {
console.log('f2 evaluada')
return function (
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
console.log('f2 ejecutada')
}
}
class ClaseEjemplo {
@f1()
@f2()
saludar() {}
}
Salida…
f1 evaluada
f2 evaluada
f2 ejecutada
f1 ejecutada
Evaluaci贸n de los decoradores
El orden en el que los decoradores es aplicado es el siguiente.
- Decoradores de par谩metros (decoradores de par谩metros), seguidos por Method Accesors o Decoradores de Propiedades son aplicados a cada instancia de cada miembro.
- Decoradores de par谩metros, seguido por Method Accesors, o Decoradores de Propiedades son aplicados a cada miembro est谩tico.
- Decoradores de par谩metros, son aplicados al constructor.
- Decoradores de clases son aplicados a las clases.