Декораторы по функциям
Я вижу, что декораторы babel.js(доступные в "стадии 1" ) реализуют спецификацию в https://github.com/wycats/javascript-decorators. Похоже, что декораторы ограничены (1) классами, (2) аксессуарами и (3) методами. В моем случае я хочу использовать декораторы в простых старых функциях, как в
@chainable
function foo() { }
где (только пример)
function chainable(fn) {
return function() {
fn.apply(this, arguments);
return this;
};
}
Я не вижу никакой логической причины, по которой декораторы не могут быть применимы к функциям. Мой вопрос в том, есть ли способ сделать это? Или есть какая-то веская причина, почему функции не могут быть украшены?
Оказывается, проблема поднята для этого на https://github.com/wycats/javascript-decorators/issues/4.
Ответы
Ответ 1
Чтобы выполнить декоратор, вы оцениваете выражение, и это предотвращает подъем (даже для объявления переменной, правая часть задания остается помещенной). Поэтому он несовместим с подъемами объявлений.
Как работа, я предложил, чтобы функциональные выражения, выражения функций генератора и функции стрелок были разрешены для оформления:
const func = @someDecorator('abc') (x, y) => { return x + y };
Увы, этого не было с большим энтузиазмом: https://esdiscuss.org/topic/decorators-for-functions
Ответ 2
У вас, конечно, есть точка.
Но поскольку neo_blackcap указал, декоратор функций не является частью проект декораторов ES7.
Итак, самое лучшее, что вы можете сделать, это начать обсуждение соответствующего трекера, чтобы привлечь внимание сообщества к вашему предложению.
Декораторы ES7 находятся на первом этапе разработки, что означает, что их API все еще находится в разработке и может претерпеть любые изменения.
Ответ 3
Я думаю, что проблема заключается в том, что декоратор функций не был проектом ES7.
Конечно, вы все равно можете реализовать свой декоратор функций