プロが教えるわが家の防犯対策術!

画像の読み込み完了をトリガーとして動作する以下のような関数があります。

var img = new Image();
window.onload = function() {
img.onload = func;
}
function func() {
(省略)
}

img.onloadによって、画像の読み込みが完了したときに動作する関数を指定していますが、なぜfuncと書き、func()ではいけないのでしょうか?実際に試してみましたが、()をつけると動作しませんでした。()をつけないで関数を呼び出す方法を知らなかったので(無名関数を使う場合でさえ、変数名()という形を取るのに)、この理由が分からなくて困っています。どなたか教えてください。

A 回答 (4件)

ようは、オブジェクトにメソッドを設定するときには


カッコをつけないということ。
たとえばこんな感じ。

<script languge=javascript>
var test = new Object;
test.hoge="ほげ";
test.testfunc=alertHoge;

function alertHoge(){
alert(this.hoge);
}
</script>

<input type="button" onClick="test.testfunc()" value="てすと">
    • good
    • 0

オブジェクトというものが解ると少し理解しやすくなるとは思いますけど、以下の違いをごく単純化して述べてみます。



>var img = new Image();
Imageというオブジェクトのコンストラクター関数を実行。

>window.onload = function() { }
無名関数の定義を、オブジェクトとして(というかメモリ上の関数定義の場所を示す物を)代入している。
windowにおいてonload というイベントが発生した時に実行が行われるのであって、この場所では関数内部は実行されない。

>img.onload = func;
function func() { }という関数定義によって作成されるオブジェクト(メモリ上の関数定義の場所を示す物を)を代入している。
img にsrc指定して、読み込み完了=onload時に実行が行われる。この場所では関数内部は実行されない。

>function func() {(省略)}
関数定義=関数オブジェクトが作成されている。funcでその作成されたオブジェクトの場所を示し、func()とすることによって内部のコードを実行させることが出来る。


追加例文 img.onload = func();
func 関数が実行した結果を代入しているが、onloadというイベントに代入できるのは、関数オブジェクトなので、それ以外の結果が代入されるとエラーになる。
    • good
    • 0

=の左辺に、右辺の関数が実行された結果の戻り値を渡すか、ステータス(正常に実行されたか、エラーが発生したか等)を渡すかの違いです。

    • good
    • 0

img.onload = func();


だとfunc()を実行した結果をonloadに代入します。

img.onload = func;
はfuncという関数を渡しています。
読み込み完了時にfunc関数が呼ばれるように指定しています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!