2017-03-06 619 views
1

以下是我的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?

回答

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" 
+0

获取以下异常Object.keys(...)。每个都不是函数 – Prasath

+0

@Prasath我的不好,更新了我的答案。 – Icid

+0

我查了更新的答案,同样的例外。我认为这是次要的。我可以修好它。我明白你的回答是张贴的。顺便说一下,如果你有任何关于'每个不是功能'的想法? – Prasath