附加一个日志函数,以便在类中的所有函数上运行

时间:2018-03-18 17:42:32

标签: javascript node.js

假设我在nodejs中使用了这个javascript类:

modules.export = class Core{
     constructor(app) {}
     func1(){}
     func2(){}
}

我称之为:

const Core  = require(/*path to core file*/)
core = new Core()

每次调用func1()func2()或构造函数时,如何附加要调用的函数?

即每次调用这两个函数时调用一个日志函数。最终,如果应用程序变得太大,这将使站点范围内的日志记录变得更容易。

1 个答案:

答案 0 :(得分:0)

您可以从Parent Class继承,它将负责与日志绑定并覆盖Derived类函数,如下所示



class BaseLog {
  constructor() {
    console.log('Constructor called');
    Object.getOwnPropertyNames(this.__proto__).forEach(key=> {
      const fun = this.__proto__[key];
      // Can not overwrite constructors           
      if (typeof fun === 'function' && key!=='constructor') {
        const newFunc = function newFunc() {
          console.log('called', key);
          return fun.apply(this, arguments);
        };
        this.__proto__[key] = newFunc
      }
    })
  }
}

class Test extends BaseLog {
  constructor() {
    super();
    this.a = 10;
  }

  getA() {
    return this.a
  }
}
test = new Test()
console.log(test.getA())