Прокси-метод для регистрации вызовов функций
Существует новый способ использования Прокси для реализации этой функции в JS.Предположим, что мы хотим иметь console.log
всякий раз, когда вызывается функция определенного класса:
class TestClass {
a() {
this.aa = 1;
}
b() {
this.bb = 1;
}
}
const foo = new TestClass()
foo.a() // nothing get logged
, мы можем заменить наш экземпляр класса Proxy, который переопределяет каждое свойство этого класса.Итак:
class TestClass {
a() {
this.aa = 1;
}
b() {
this.bb = 1;
}
}
const logger = className => {
return new Proxy(new className(), {
get: function(target, name, receiver) {
if (!target.hasOwnProperty(name)) {
if (typeof target[name] === "function") {
console.log(
"Calling Method : ",
name,
"|| on : ",
target.constructor.name
);
}
return new Proxy(target[name], this);
}
return Reflect.get(target, name, receiver);
}
});
};
const instance = logger(TestClass)
instance.a() // output: "Calling Method : a || on : TestClass"
проверьте, что это на самом деле работает в Codepen
Помните, что использование Proxy
дает вам гораздо больше функциональности, чем просто ведение журнала консолиnames.
Также этот метод работает и в Node.js .