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
 
            