2017-03-20 18 views
0

node.jsの呼び出しの前に関数呼び出しをフックするか、関数を再定義する方法はありますか?私は単体テストのためにこれを必要とします。node.jsの関数呼び出しをフック

例:あなたは何ができるか

//some js file 
function a(){ 
b()// need to be hooked 
} 

function b(){ 
    //do some stuff 
} 
+0

var a = Function.call.bind(b, null); function b(){ //do some stuff } 
あなたは '()' ....例えば '関数に引数に(B){B()}を取るべきである' – LostJon

答えて

0

は、ターゲット関数のラッパーを作成し、あなたが実行する前に行う必要がどんな操作を実行、元である:あなたが使用することができます

const tmp = b 
function b { 
    doSomething() 
    maybeBroadcastAnEvent() 
    tmp() //run original function 
} 
+0

あなた@Serhiyリャザーノフのためにその仕事をしました –

0

.apply()argumentsオブジェクトをaのコールデータをbファンクションに転送するオブジェクト。

function a(){ 
return b.apply(this, arguments) 
} 

function b(){ 
    //do some stuff 
} 

だから、どんなthis値と引数aに与えられたがbに転送され、そしてどんなbリターンはaによって返されます。


それはあなたがあなたの新しい質問に試みたようだとして、あなたはより簡潔に、これを達成するためにFunction.prototype.call方法にbをバインドする関数を作成することができます。 aが呼び出されたときに

var a = Function.call.bind(b); 

function b(){ 
    //do some stuff 
} 

は今、設けられた第一引数はbthis値となり、提供残りの引数はbの定期的な引数になります。


bだけで、すべての提供の引数を転送されますように、あなたは、あなたが.callの最初の引数としてnullバインドすることができ、this値を気にし、ちょうどすべての引数を渡すためにしたくない場合通常のargsとして。

関連する問題