Na explicação do instrutor temos a seguinte explicação:
Reflect é um artefato novo do ES2015! Contudo, poderíamos conseguir o mesmo resultado dessa forma:
// No ES5
voar() {
Aviao.prototype.voa.apply(this, []);
}
Essa solução é menos verbosa, mas a ideia do ES2015 foi centralizar operações como essa em Reflect e com o tempo esse deve se tornar o método mais indicado para realizar operações como essa.
Considerando a leitura de outros topicos aqui no forum mesmo, os códigos abaixo seriam então equivalentes:
class Passarinho {
//Codigo omitido.....
voa() {
// executa o método `voa` de `Avião` usando como contexto a instância de `Passarinho`
Reflect.apply(Aviao.prototype.voa, this, []);
}
}
com este
class Passarinho {
//Codigo omitido.....
voa() {
// executa o método `voa` de `Avião` usando como contexto a instância de `Passarinho`
Aviao.prototype.voa.apply(this, []);
}
}
com este
class Passarinho {
//Codigo omitido.....
voa() {
// executa o método `voa` de `Avião` usando como contexto a instância de `Passarinho`
Aviao.prototype.voa.bind(this)();
}
}
Lembrando que no caso do bind uma nova função é retornada e por isso precisa definir a chamada imediata ao final, já no caso do apply ele mesmo chama o método internamente. Testei os codigos aqui e o comportamento de escrita no log foi o mesmo.
Existe alguma pratica recomendada ou fica "a gosto do freguês"?
Como a diferença é sutil, percebi apenas que nos casos onde a função não deve ser chamada no ato é preferencial usar o bind e sem querer entrar muito no mérito de compatibilidade pois o curso explorará isso mais na frente, mas pela documentação abaixo a classe Reflect não é suportada pelo "InhEca" enquanto o método bind sim.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
Queria uma opinião para confirmar se este raciocínio esta correto
Grato