Graff46
@Graff46
Программист любитель

Как перегрузить метаметоды в JS?

В ЯП Lua у объектов есть метатаблицы в которых содержаться метаметоды - ф-ции вызываемые при работе с объектами, по сути это и есть методы объекта, например добавление нового элемента в массив, эти метаметоды можно перегружать... Интерсно что есть метаметоды которые вызываются не только при явном вызове метода или св-ва объекта, но и при некоторых других событиях, например инициализация объекта, доступ к элементу массива и тд... В JS мне нужно отловить момент когда к массиву добавляется значение, не только через метод(ы)
var arr = [];
arr.push("string");

но и синтаксической конструкцией:
var arr = [];
arr[1] = "string";

Подскажите как можно отлавливать и перегружать методы у объектов в JS?

  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Используйте Proxy:

const arr = new Proxy([], {
  get(target, prop) {
    const value = target[prop];
    return value instanceof Function
      ? (...args) => {
          console.log(`метод "${prop}" вызван со следующими аргументами:`, args);
          return value.apply(target, args);
        }
      : value;
  },
  set(target, prop, value) {
    console.log(`свойству "${prop}" наначено следующее значение:`, value);
    target[prop] = value;
    return true;
  },
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы