Javascript moderno para o resgate!
Isso pode não ter uma grande chance de ser visto com a longa lista de respostas, mas agora isso foi resolvido * no nível do idioma com a nova sintaxe de encadeamento opcional
me.onChange?.(str)
É tão simples assim - onChange
só é chamado se existir .
Se onChange
não existir, nada acontecerá e a expressão retornará undefined
- portanto, se ela tiver um valor de retorno que você usaria de outra forma, basta verificar esse valor!== undefined
antes de continuar.
Borda caso ressalva - se onChange
faz existir, mas é não uma função, você tem uma TypeError
. É como você esperaria, é o mesmo que tentar chamar qualquer não-função como uma função, mas vale ressaltar explicitamente que o Encadeamento Opcional não faz mágica para fazer isso desaparecer.
* Bem, tecnicamente, o Opcional Chaining ainda é uma proposta do estágio 4 do TC39, portanto ainda não está na especificação do ECMAScript, mas o estágio 4 significa que ele foi finalizado e sua inclusão é essencialmente garantida, apenas aguardando o lançamento de uma nova versão. Você pode usar a sintaxe em sua versão final hoje via Babel com confiança de que isso não mudará. É mesmo em texto datilografado!