Подтвердить что ты не робот

Декораторы по функциям

Я вижу, что декораторы 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.

4b9b3361

Ответ 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.

Конечно, вы все равно можете реализовать свой декоратор функций