画像の読み込み完了をトリガーとして動作する以下のような関数があります。
var img = new Image();
window.onload = function() {
img.onload = func;
}
function func() {
(省略)
}
img.onloadによって、画像の読み込みが完了したときに動作する関数を指定していますが、なぜfuncと書き、func()ではいけないのでしょうか?実際に試してみましたが、()をつけると動作しませんでした。()をつけないで関数を呼び出す方法を知らなかったので(無名関数を使う場合でさえ、変数名()という形を取るのに)、この理由が分からなくて困っています。どなたか教えてください。
No.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="てすと">
No.3ベストアンサー
- 回答日時:
オブジェクトというものが解ると少し理解しやすくなるとは思いますけど、以下の違いをごく単純化して述べてみます。
>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というイベントに代入できるのは、関数オブジェクトなので、それ以外の結果が代入されるとエラーになる。
No.1
- 回答日時:
img.onload = func();
だとfunc()を実行した結果をonloadに代入します。
img.onload = func;
はfuncという関数を渡しています。
読み込み完了時にfunc関数が呼ばれるように指定しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- UNIX・Linux gawk 3 2022/08/18 14:07
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Visual Basic(VBA) PowerPoint VBA で画像の鮮明度を変更する方法がわかりません 2 2023/03/24 13:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
初心者です。gulpでコンパイル...
-
C#でボタン名を変更しても動く
-
時間稼ぎの命令文とは?
-
JavaScriptで、実行するたび値...
-
VB.netでタイマーがスタートし...
-
デザイン時のVisible=Falseは実...
-
eval()の危険性の具体例を教え...
-
VBAマクロ、パスがありませんで...
-
既存のwebサイトで、ローカルの...
-
以下のコードを実行しても、オ...
-
PowerPointで時計表示
-
[prototype.js] Ajax.Requestの...
-
C#コンストラクタが2回動く
-
PowerBuilderのDOUBLEデータ型...
-
正整数の半角数字かどうか判定する
-
JavaScriptでテキス...
-
「終了していない文字列型の定...
-
ASP(VBS) ←→ JavaScript の変数...
-
VB.NET2003 テキストボックスに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
デザイン時のVisible=Falseは実...
-
1つのVBAコードをすべてのコア...
-
〔Excel:VBA〕マクロの実行が異...
-
以下のコードを実行しても、オ...
-
PowerPointで時計表示
-
C#でボタン名を変更しても動く
-
jQuery ui Datepicker 明日以降...
-
初心者です。gulpでコンパイル...
-
リクエスト結果が一瞬しか表示...
-
innerHTMLなどの反映タイミング
-
既存のwebサイトで、ローカルの...
-
JavaScriptで、実行するたび値...
-
VBA ステータスバー DoEvents
-
VBA SORT Applyでエラー
-
resizeToメソッドが動作しません
-
Excel VBA にて JavaScript の...
-
eval()の危険性の具体例を教え...
-
ラベルの色がかわってくれない
おすすめ情報