【问题标题】:Create a Logger for an object in Javascript在 Javascript 中为对象创建记录器
【发布时间】:2018-02-10 19:33:17
【问题描述】:

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

例如:

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

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

【问题讨论】:

  • 您可以在现代浏览器中使用Proxy 完成此操作。

标签: javascript logging


【解决方案1】:
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“代理”标准的内置对象。 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Proxy

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2013-12-22
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多