Méthode Proxy pour enregistrer les appels de fonction
Il existe une nouvelle façon d'utiliser Proxy pour réaliser cette fonctionnalité en JS. Supposons que nous voulions avoir un console.log
chaque fois qu'une fonction d'une classe spécifique est appelée :
class TestClass {
a() {
this.aa = 1;
}
b() {
this.bb = 1;
}
}
const foo = new TestClass()
foo.a() // nothing get logged
nous pouvons remplacer notre instanciation de classe par un Proxy qui surcharge chaque propriété de cette classe. ainsi :
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"
vérifier que cela fonctionne réellement dans le Codepen
N'oubliez pas que l'utilisation de Proxy
vous offre beaucoup plus de fonctionnalités que la simple consignation des noms de la console.
Cette méthode fonctionne également dans Node.js aussi.
1 votes
Excellente question, j'aimerais bien savoir si c'est possible mais je suis presque sûr que non... Peut-être ajouter une demande de fonctionnalité pour que cela soit ajouté dans le moteur de js de votre navigateur préféré ? :-)
0 votes
Question parfaite, j'ai besoin de quelque chose de similaire à ceci