javascriptの疑問
window.onload=function(){ document.getElementById('myId').onclick =myidEvent; } function myidEvent(){ alert('click'); }
WebクリエイティブのためのDOM Scripting
というテキストでは、上のようなサンプルがある。
それによると
このようにしておくとページがすべて読み込まれた際にgetElementById()が実行されます
とのこと。
それだけの理由ではいまひとつよくわからず、
window.onload=function()
という書き方が妙に引っかかるのでいくつか調べました。
下記の通り、javascriptでは関数とオブジェクトを区別しなくてよいそうな。とはいえ、言語仕様として上のコードが何を意味するのか興味があったので、調べました。
結論めいたものはないのですが、答えの一つは下記のページにあるかもしれません。
いずれにしろ奥が深いのでもう少し勉強します。
JavaScript では、DOM イベントハンドラは関数です (他の DOM 言語バインディングでは handleEvent メソッドを持つオブジェクトであるのに対して) 。その関数には、第一番目かつ唯一のパラメータとしてイベントオブジェクトが渡されます。他のパラメータと同じように、イベントオブジェクトを使う必要が無ければ仮引数のリストから省略できます。
11.関数もオブジェクトだ
JavaScriptの関数は他のデータ(数値、文字列、論理値、オブジェクト)と同様に変数に代入することができます。
function hello(p) {
document.write("hello " + p + " world");
}
var f = hello; // 関数の代入
f("JavaScript"); // 関数オブジェクトのコール実行結果:
hello JavaScript world
上記のように、関数はデータとして変数に代入したり、代入後の変数を関数として呼び出すことが簡単にできます。
関数をオブジェクトとして扱うか、関数呼び出しとするかは使用する文脈("()"をつけるか否か)で決まります。
この例で「関数の宣言」と書きました。実はこの表現は正確ではありません。JavaScriptには宣言文は一つもなく、全てが実行文としてとらえるべきです。function hello ..という文は、変数helloに関数オブジェクトを代入するという意味です。
http://www.tokumaru.org/JavaScript/function_is_an_object.htm