top | item 9877785

(no title)

vault_ | 10 years ago

It seems like only methods can be decorated. Is there any hope for decorators on top-level functions in the future?

discuss

order

svieira|10 years ago

Unfortunately, due to hoisting decorating top-level functions is a real pain [1].

What should the behavior of:

    myMagicFunction();

    var myDecorator = require('myDecorator');

    @myDecorator
    function myMagicFunction() {
      // TODO: Make magic
    }
be?

- `myDecorator`'s require statement is hoisted above `myMagicFunction`'s declaration so that `myMagicFunction` is always decorated? (Results in a given `var`'s behavior changing depending on whether it is invoked as a decorator, an exceedingly non-obvious behavior)

- Function hoisting doesn't happen for decorated functions (non-obvious, possibly hard to implement).

- Function hoisting happens but the decorator is not hoisted (resulting in a sometimes-decorated function).

These problems don't admit of a simple solution (at least as far as I can see).

  [1]: https://github.com/wycats/javascript-decorators/issues/4