Estendendo função com classes ES6
No ES6, objetos especiais podem ser estendidos, permitindo a herança do objeto Function. Embora seja possível chamar esses objetos como funções, implementar a lógica para essa chamada pode ser um desafio.
Passando dados de instância para chamada de função
Ao chamar uma classe como uma função , isso se refere ao objeto de janela. Para acessar os dados da instância, duas abordagens estão disponíveis:
class Smth extends Function { constructor(x) { super("return " JSON.stringify(x) ";"); } }
class Smth extends Function { constructor(x) { function smth() { return x; }; Object.setPrototypeOf(smth, Smth.prototype); return smth; } }
Abstraindo a extensão da função
Uma abordagem mais generalizada é criar uma classe ExtensibleFunction que lide com a extensão:
class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } }
Esta classe pode então ser usada para estender classes específicas:
class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); // closure } }
Em resumo, estender Function com classes ES6 permite herdar o comportamento da função enquanto personaliza a lógica de chamada. Diferentes abordagens podem ser usadas para fornecer acesso aos dados da instância ao chamar a função estendida.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3