Задать вопрос
@karpo518

Как в javascript перехватывать вызов методов объекта?

Пробую сделать через прокси, но столкнулся с ограничениями.
1. Хук apply работает только если в прокси обернута функция, а у меня это объект.
2. Хук get не позволяет получить параметры вызова метода, а они мне нужны.

Пример кода:
function check(message) {
  console.log("check called!");
}

function sequence(functions) {
  const func = () => {
    const sObj = {};
    sObj.functions = functions;
    return sObj;
  };
  return new Proxy(func, {
    apply(target, propKey, itemProxy) {
      if (propKey === "check") {
        console.log([target, propKey, itemProxy]);
        console.log("apply runned!");
        console.log(target.functions);
        target.functions.propKey.apply();
      }
    }
  });
}

let s = sequence({ check });

s.check("test");
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Хук get не позволяет получить параметры вызова метода

Позволяет. Возвращайте функцию, которая будет содержать вызов метода плюс нужные вам действия с параметрами:

function sequence(functions) {
  return new Proxy(functions, {
    get(target, key) {
      const val = target[key];
      return val instanceof Function
        ? (...args) => {
            console.log(`${key} called with arguments: `, args);
            return val.apply(target, args);
          }
        : val;
    },
  });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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