"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar ningún comportamiento de método para propiedades que utilizan proxies en JavaScript?

¿Cómo implementar ningún comportamiento de método para propiedades que utilizan proxies en JavaScript?

Publicado el 2024-11-09
Navegar:928

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

Implementación de noSuchMethod basado en proxy para propiedades

La característica noSuchMethod en JavaScript permite interceptar llamadas a métodos inexistentes . Sin embargo, ¿existe un mecanismo similar para las propiedades?

Proxies ES6 al rescate

Los proxies ES6 brindan la posibilidad de personalizar el acceso a las propiedades. Podemos utilizar esto para emular un comportamiento similar a __noSuchMethod__ para propiedades:

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);
        };
      }
    }
  });
}

Ejemplo de implementación

Aquí hay un ejemplo del uso del proxy para implementar una clase "ficticia" que puede manejar propiedades desconocidas:

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");

Uso

  • __ownProp1__: registra el valor de propiedad existente.
  • __test__: activa el método definido.
  • someName(1, 2)__: llama a un método inexistente con argumentos, que es manejado por __noSuchMethod gancho.
  • __xyz(3, 4)__: similar al anterior, pero demuestra que también se pueden manejar propiedades que no son funcionales.
  • __doesNotExist("a", "b ")__: Registra la ausencia de un método/propiedad con los argumentos proporcionados.
Declaración de liberación Este artículo se reimprime en: 1729232480 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3