2017-03-06 2 views
1

다음은 자바 스크립트 코드입니다. 내가 myObjfn.loadA를 호출 할 때마다자바 스크립트에서 함수 가로 채기

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

(), 그것은 loadA 방법을 실행하기 전에 myObjfn.before() 메소드를 호출해야합니다. loadB() & loadC()와 동일합니다. 모든 loadA, loadB 및 loadC 메서드에서 before() 메서드를 명시 적으로 호출하고 싶지 않습니다. 자바 스크립트에서 이것을 달성하는 옵션이 있습니까?

답변

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