- ベストアンサー
functionの中身が同じな場合の呼び出し方法
- functionの中身が同じな場合、同じ内容を複数の場所で呼び出す方法について質問です。
- 例えば、キー入力やボタンクリックなどのfunctionの内容が同じ場合、重複したコードを避ける方法を知りたいです。
- 特定のfunctionの内容が同じな場合、それを一度だけ記述して他の場所から呼び出す方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ボタンクリックとキー入力による処理が全く同じなのでしたら、名前を付けた関数を1つ定義して、その関数をイベントハンドラ( onRelease や onKeyDown など)に登録してはいかがでしょう。 スクリプトの一例です。このスクリプトは、フレームに記述してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //* * * //HTMLページを開く関数 function Open_Page() { getURL( "○○○" ); } //マウスでクリックした時の処理 hoge1.onRelease = Open_Page; //キーを押した時の処理 keyListener = new Object(); keyListener.onKeyDown = Open_Page; Key.addListener( keyListener ); //* * * ↑この場合は、hoge1 がマウスでクリックされた場合と、キーボードの何かのキーが押された時に、Open_Page という関数が呼び出されます。 入力されたキーを判定してからクリックされた時と同じ処理をしたい場合は、onKeyDown = function の中で関数 Open_Page を呼び出します。 //* * * //HTMLページを開く関数 function Open_Page() { getURL( "○○○" ); } //マウスでクリックした時の処理 hoge1.onRelease = Open_Page; //キーを押した時の処理 keyListener = new Object(); keyListener.onKeyDown = function() { if( Key.getCode() == 57 ) { Open_Page(); } }; Key.addListener( keyListener ); //* * * イベントハンドラ( onRelease や onKeyDown など)には、関数の参照という情報を登録する約束になっています。 onRelease = function …と定義した場合は、名前のない関数(匿名関数といいます)がその場で作られ、できた関数の参照が登録されます。 function Open_Page というように関数を定義した場合は、関数の名前そのものがその関数の参照になっています。 名前のあり・なしの違いはあれど、どちらも参照なのですから、名前のある関数も同様にイベントハンドラに登録することができます。 1番目の作例では onKeyDown = Open_Page; と、Open_Page の後に何も付いていないのに対し、2番目の作例の onKeyDown = function の中にある Open_Page には ( ) が付いている点に注目してください。 関数の名前は参照ですが、名前の後に ( ) を付けると、関数を”呼び出す”という意味になります。 onKeyDown に関数 Open_Page を登録する時は、この関数の”参照を”登録するのですから、( ) は不要です。 しかし、onKeyDown = function では、名前のない関数を作ってこちらを登録します。その関数の中で関数 Open_Page を”呼び出す”ので、( ) が必要になります。 関数を定義する方法・使い方の詳細につきましては、解説書や解説サイト等をご参考になさってください。