我想编写一个记录器,它接受一个对象参数(内置或用户定义)并返回新对象,该对象充当参数并具有相同的方法,并且每个方法调用都记录在浏览器控制台中。
例如:
var a = [];
var b = myLogger(a);
b.push("foo");
< array.push("foo") -> 1;
b.push("bar");
< array.push("bar") -> 2;
据我了解,我需要创建一个装饰器来解决这个问题。这是解决这个任务的正确方法吗?任何其他建议也不胜感激。
答案 0 :(得分:0)
function myLogger (target) {
var handler = {
get(target, name){
var result = name in target? target[name] : undefined;
console.log(`< ${JSON.stringify(target)}.${name} -> ${result}`);
return result;
}
};
return new Proxy(target, handler);
}
var a = { x: 1};
var a_Proxy = myLogger(a);
a_Proxy.x; // logs < {"x":1}.x -> 1
使用可以使用ES6&#34;代理&#34;标准内置对象。 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Proxy