node.jsの呼び出しの前に関数呼び出しをフックするか、関数を再定義する方法はありますか?私は単体テストのためにこれを必要とします。node.jsの関数呼び出しをフック
例:あなたは何ができるか
//some js file
function a(){
b()// need to be hooked
}
function b(){
//do some stuff
}
node.jsの呼び出しの前に関数呼び出しをフックするか、関数を再定義する方法はありますか?私は単体テストのためにこれを必要とします。node.jsの関数呼び出しをフック
例:あなたは何ができるか
//some js file
function a(){
b()// need to be hooked
}
function b(){
//do some stuff
}
は、ターゲット関数のラッパーを作成し、あなたが実行する前に行う必要がどんな操作を実行、元である:あなたが使用することができます
const tmp = b
function b {
doSomething()
maybeBroadcastAnEvent()
tmp() //run original function
}
あなた@Serhiyリャザーノフのためにその仕事をしました –
.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
}
は今、設けられた第一引数はb
のthis
値となり、提供残りの引数はb
の定期的な引数になります。
b
だけで、すべての提供の引数を転送されますように、あなたは、あなたが.call
の最初の引数としてnull
バインドすることができ、this
値を気にし、ちょうどすべての引数を渡すためにしたくない場合通常のargsとして。