«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как реализовать отсутствие такого поведения метода для свойств с использованием прокси в JavaScript?

Как реализовать отсутствие такого поведения метода для свойств с использованием прокси в JavaScript?

Опубликовано 9 ноября 2024 г.
Просматривать:618

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

Реализация noSuchMethod на основе прокси для свойств

Функция noSuchMethod в JavaScript позволяет перехватывать вызовы несуществующих методов . Однако существует ли аналогичный механизм для свойств?

Прокси-серверы ES6 на помощь

Прокси-серверы ES6 предоставляют возможность настраивать доступ к свойствам. Мы можем использовать это для эмуляции поведения свойств, подобного __noSuchMethod__:

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

Пример реализации

Вот пример использования прокси для реализации класса «Dummy», который может обрабатывать неизвестные свойства:

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

Использование

  • __ownProp1__: записывает существующее значение свойства.
  • __test__: запускает определенный метод.
  • someName(1, 2)__: вызывает несуществующий метод с аргументами, который обрабатывается ловушкой __noSuchMethod.
  • __xyz(3, 4)__ : аналогично приведенному выше, но демонстрирует, что также можно обрабатывать нефункциональные свойства.
  • __doesNotExist("a", "b")__: регистрирует отсутствие метода/свойства с предоставленными аргументами.
Заявление о выпуске Эта статья перепечатана по адресу: 1729232480. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3