在Javascript

时间:2018-02-10 19:33:17

标签: javascript logging

我想编写一个记录器,它接受一个对象参数(内置或用户定义)并返回新对象,该对象充当参数并具有相同的方法,并且每个方法调用都记录在浏览器控制台中。

例如:

var a = [];
var b = myLogger(a);
b.push("foo");
< array.push("foo") -> 1;
b.push("bar");
< array.push("bar") -> 2;

据我了解,我需要创建一个装饰器来解决这个问题。这是解决这个任务的正确方法吗?任何其他建议也不胜感激。

1 个答案:

答案 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