1

関数のいくつかの動作をオーバーライドする必要があります。これは、他の関数を呼び出した後に行われます。問題は、この親関数がライブラリであり、変更したくないことです。そのため、フラグを立てたり、この関数を変更したりするような解決策はあまり良くありません。関数内に変更可能な呼び出し元オブジェクトがあることを知っているので、それをうまく理解できるかもしれません。例を次に示します。

function parent()
{
  console.log("some need stuff");
  some.handler.function.from.config.that.i.can.change();
  console.log("need omit this right till the end");
}

function child()
{
  console.log("need to somehow stop evaluation of " + child.caller + " function");
}

ruby プログラマーとして、クロージャーの内部スコープから評価を終了できるラムダがあることを知っています。しかし、JavaScriptからこれを行う方法がわかりません。

4

3 に答える 3

7

それを直接行うことはできません。(しかも.caller時代遅れ)

ただし、汚いトリックを使用できます。

try{
    parentFunction();//calls child
}catch(e){
   //done
}

function child(){
    doWhatever();
    throw new Error("this will hopefully propagate");
}

フィドル

これは、子を呼び出すときに親が例外自体をキャッチしないと仮定してのみ機能します。

さらに、一般に、フロー制御に例外を使用することはお勧めできません。これは最後の手段として使用してください。

于 2013-06-29T19:18:38.413 に答える