为模块功能制作beforeFilter?

时间:2018-02-10 10:41:40

标签: javascript node.js ecmascript-6

beforeFilter是在调用任何函数之前执行的代码块。我是javascript的新手。

假设我有一个模块:

SomeModule.js

module.exports = {

    someFunction: function (arg) {
        //some logic here
    },
}

现在每当我想调用上述函数时,我都会这样做:

SomeModule.someFunction("helloWorld");

像这样你可以假设我在模块中有很多函数但我想在调用模块的任何函数之前执行一些代码,假设我想执行这一行:

console.log("BeforeFilter Called");

所以问题是: 如何在调用模块的任何函数之前确保执行该行?

1 个答案:

答案 0 :(得分:2)

您必须迭代SomeModule的属性并覆盖所有函数属性:

const SomeModule = {
  someFunction(a, b) {
    console.log('some function', a + b);
  }
};

for (const i in SomeModule) {
  if (typeof SomeModule[i] === 'function') {
    const originalFunction = SomeModule[i];
    SomeModule[i] = function (...args) {
      console.log('BeforeFilter Called');
      originalFunction(...args);
    };
  }
}

SomeModule.someFunction(3, 4);