"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como as classes ES6 podem ser usadas para estender funções e acessar dados de instância?

Como as classes ES6 podem ser usadas para estender funções e acessar dados de instância?

Publicado em 2024-11-12
Navegar:266

How can ES6 Classes be Used to Extend Functions and Access Instance Data?

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:

  1. Hardcoding: Força a superchamada a esperar uma string de código contendo os dados da instância.
class Smth extends Function {
  constructor(x) {
    super("return "   JSON.stringify(x)   ";");
  }
}
  1. Usando um fechamento: Retorna uma função de fechamento que acessa variáveis ​​de instância.
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.

Declaração de lançamento Este artigo foi reimpresso em: 1729462035 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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