以下是我的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中实现吗?

最佳答案

你可以做这样的事情。它为对象中除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"

10-07 23:13