2017-03-06 618 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