JavaScriptで関数の存在有無を見分けるには

AndroMDAで、body onload を使用する際にlayoutファイルに書き込む必要がある。
このため、onload内で呼び出した関数が全てのjsp内に含まれていないといけなくなってしまう。

関数がないとアラートがでてうっとうしいので、関数が有るか無いかを判断し、有る場合のみ関数を実行するように、以下の仕組みで実現できたのでメモっておく。

以下引用。 参考URL http://narucissus.blogspot.com/2006/09/javascriptfunctionexists.html

        • -

PHPのfunction_exists関数のようなものがJavaScriptで欲しかったので探してみましたが、英語のサイトでこんな感じのやり方を見つけたのでメモ。

//関数が存在するかチェックしてから呼び出し
if ('function' === typeof obj.setName)
{
 obj.setName("foo");
}
else
{
 alert("関数setNameは存在しません。");
}

存在のチェックをしたいオブジェクトが存在する場合はobj.[関数名]をtypeofでチェックして'function'かどうか比較すればOK。 jsファイルにそのまま書いた関数はwindow.[関数名]をtypeofすればOKです。

なぜこんなことをしたかったかというと、定期的にsetIntervalで呼び出される関数があって、その関数が何回か繰り返し実行された後に成功したら特定の処理を行いたいというケースがありました。そのsetIntervalで呼び出される関数にパラメータとして渡すオブジェクトにコールバック関数を定義しておいて、処理が正しく完了したときに呼び出してもらおうということを考えたわけです。期待したとおりに動くのですが、渡すオブジェクトによってコールバックして欲しい関数がバラバラなので、コールバックするときに関数の存在をチェックしてから呼び出すようにしたかったんですね。
こういうのはあんまり使用する機会はないかも、ですが。

            • -