在javascript中拦截一个函数

时间:2017-03-06 11:55:27

标签: javascript

以下是我的javaScript代码。

var myObjfn = {
    before : function(){
        console.log("before");
    },
    loadA: function(){
        console.log("loadA");
    },
    loadB: function(){
        console.log("loadB");
    },
    loadC: function(){
        console.log("loadC");
    }
 }

每当我调用myObjfn.loadA()时,它应该在执行loadA方法之前调用myObjfn.before()方法。对于loadB()& loadC()。我不想在所有loadA,loadB和loadC方法中显式调用before()方法。有没有选择在javascript中实现这一点?

1 个答案:

答案 0 :(得分:3)

你可以这样做。这为除before函数之外的对象中的每个函数创建了一个包装函数。

var myObjfn = { ... };

Object.keys(myObjfn).forEach(key => {
  if (key === "before") return;
  var oldFunc = myObjfn[key];

  myObjfn[key] = function() {
    myObjfn.before();
    return oldFunc.apply(this, arguments);
  };
});

myObjfn.loadA();

// "before"
// "loadA"