"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 implementar esse comportamento de método para propriedades usando proxies em JavaScript?

Como implementar esse comportamento de método para propriedades usando proxies em JavaScript?

Publicado em 2024-11-09
Navegar:559

How to Implement No Such Method Behavior for Properties using Proxies in JavaScript?

Implementação de noSuchMethod baseado em proxy para propriedades

O recurso noSuchMethod em JavaScript permite interceptar chamadas para métodos inexistentes . No entanto, existe um mecanismo semelhante para propriedades?

Proxies ES6 para o resgate

Os proxies ES6 fornecem a capacidade de personalizar o acesso à propriedade. Podemos utilizar isso para emular um comportamento semelhante ao __noSuchMethod__ para propriedades:

function enableNoSuchMethod(obj) {
  return new Proxy(obj, {
    get(target, p) {
      if (p in target) {
        return target[p];
      } else if (typeof target.__noSuchMethod__ == "function") {
        return function(...args) {
          return target.__noSuchMethod__.call(target, p, args);
        };
      }
    }
  });
}

Exemplo de implementação

Aqui está um exemplo de uso do proxy para implementar uma classe "Dummy" que pode lidar com propriedades desconhecidas:

function Dummy() {
  this.ownProp1 = "value1";
  return enableNoSuchMethod(this);
}

Dummy.prototype.test = function() {
  console.log("Test called");
};

Dummy.prototype.__noSuchMethod__ = function(name, args) {
  console.log(`No such method ${name} called with ${args}`);
};

var instance = new Dummy();
console.log(instance.ownProp1);
instance.test();
instance.someName(1, 2);
instance.xyz(3, 4);
instance.doesNotExist("a", "b");

Usage

  • __ownProp1__: registra o valor da propriedade existente.
  • __test__: aciona o método definido.
  • someName(1, 2)__: Chama um método inexistente com argumentos, que é tratado pelo __noSuchMethod hook.
  • __xyz(3, 4)__: Semelhante ao acima, mas demonstra que propriedades não funcionais também podem ser tratadas.
  • __doesNotExist("a", "b ")__: Registra a ausência de um método/propriedade com os argumentos fornecidos.
Declaração de lançamento Este artigo foi reimpresso em: 1729232480 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