1
resposta

Entendendo contexto de execução do metodoOriginal do decorator

Eu não consegui entender muito bem em qual contexto/escopo o método "metodoOriginal" seria executado se nós não tivéssemos usado o "apply(this, args)". Entendi que, ao usar o apply, a gente diz que o contexto do "metodoOriginal" deve ser o mesmo da função que estamos colocando em "descriptor.value".

Ops... Acho que acabei de responder a minha pergunta enquanto escrevia ela, mas... quando a gente não coloca o "apply", o contexto do "metodoOriginal" seria o daquela função que está sendo retornada pela função "logarTempoDeExecucao", né? Esse negócio de "this", "bind" e "apply" ainda me bagunça as idéias.

Tá... mas acho que é isso. Valeu (patinho de borracha)! É isso mesmo, né?

1 resposta

Fala Renato, sua pergunta me ajudou demais a entender algumas coisas sobre o conteúdo e vou colocar aqui oq pesquisei pra poder contribuir com o post!

Sobre a questão do apply, ele realmente faz essa referência de contexto do this, porém no caso desse contexto específico., o professor está associando a função que recebeu no metodoOriginal(no caso o método que está anotado com o @) com a função do prototype.

Ele colocoudescriptor.value = function(...args: any[]), essa sendo uma função anônima, porém podemos fazer do seguinte modo, nomear a função e ao invés de passar o this que seria o escopo dela, vamos passar o nome da função. Se realizar o teste perceberá que é a mesma coisa. Isso só para exemplificar que ele está associando o método que está anotado com a função do prototype.

Uma outra situação que gostaria de chamar a atenção, é que o retorno dessa função que ele está anotando é void ou seja undefined, e nessa situação daria certo pois a função não tem retorno, porém realizar a anotação em uma função com retorno, vai causar um erro. Para corrigir, precisa colocar o return retorno, que esse retorno seria o retorno do método anotado.

Bom, não sei se dar pra entender o que eu descrevir, se tiver alguma dúvida pode ficar tranquilo em perguntar que vamos aprendendo juntos!