認識が合っているかどうか怪しいのですが、
関数をプロパティで代入する際の引数についての質問ですー。
簡単なサンプルですが、ルート直下にaaaと出力する関数trを定義し、
ルートのマウスダウンに当てます。
_root.onMouseDown=tr;
function tr() {
trace("aaa");
}
この場合はきちんと"aaa"と出力されるのですが、
下記のようにtrに引数を持たせた場合、
プロパティとしてマウスダウンに当てることは可能なのでしょうか?
function tr(str:String){
trace(str);
}
↓
_root.onMouseDown= ???
下記のように普通にfunctionから呼び出すしかないのでしょうか?
_root.onMouseDown=function(){
tr("aaa");
}
宜しくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
> 「=tr("aaa");」ではマウスダウンに設定できないのでしょうか???
> 左辺は同じで、右辺の関数に戻り値があるかないかで
> 結果が変わるロジックがよく分かりません。。。
マウスダウンに設定できる・できないという意味では前回の回答で可能なので"できる"です
ただ、なぜ return を使ってfunctionを返すの?ということなので
その必要性を理解していきましょう
////////
よくある変数同士の代入の場合
a = 1;
b = a;
とすれば変数aを参照し代入されている内容 1 が、変数bに代入されます、しかし
b = a();
では b に 1 は代入されません
これと一緒で「=tr;」の形はtrを参照し、その値=functionを代入してくれます
「=tr("aaa");」のほうですが、#2の方の説明にもあるように、
末尾に「()」を付けることで、値の実行を試み可能なら実行します
「=tr("aaa");」だと、tr を参照して値を返すのではなく、実行するのです
ここが大きな違いで、今回の結果を理解するために最も重要な部分です
これを踏まえ、「=tr("aaa");」のような形で左辺にfunctionを代入するには、
実行した結果でfunction自体を戻り値として返す必要があるというわけです
/////ここから下は参考程度に/////
更に細かいことを言うと、以下は私の感覚的なもので、
実際の構造を示しているわけではありませんが
trのまとまり {
set > this.value = value
└> 書き込み用 自身の値を変える(tr = ~; といった参照)
get > return this.value
└> 読み取り用 自身の値を返す(今回の ~ = tr; といった参照)
method > function(){statement}
└> 実行用 自身のstatementを実行する(今回の tr("aaa"); といった参照)
}
のように、参照の仕方によってアクセスする場所が違うという感じです
No.3
- 回答日時:
イベントハンドラの関数定義の流れや実行結果に関しては、
#2の方が詳しく説明してくれているので省くとして、
今回の例で言うと、
_root.onMouseDown=function(){
tr("aaa");
}
という形で tr が実行される無名関数を代入したいわけですから、
_root.onMouseDown= ???;という短い形で記述したいならば、
関数を実行して、trに引数を指定して実行する無名関数を返してあげれば可能です
function tr(str:String){
trace(str);
}
function hoge(str:String) {
return function () {
tr(str);
};
}
_root.onMouseDown = hoge("aaa");
////////
上記のユーザ定義関数 tr 自体が、動的に変更されないのならば、
そのまま無名関数の中に処理を記述する下記のような方法
function hoge(str:String) {
return function () {
trace(str);
};
}
_root.onMouseDown = hoge("aaa");
という簡略的な形式も可能です
この回答への補足
↓↓少し自分の回答欄の訂正です
>「=tr("aaa");」では実行されないのでしょうか???
ではなく、
「=tr("aaa");」ではマウスダウンに設定できないのでしょうか???
でした。
左辺は同じで、右辺の関数に戻り値があるかないかで
結果が変わるロジックがよく分かりません。。。
宜しくお願いしまっす!
ありがとうございますー!
はぁ~。なるほどです
関数を返す無名関数をひとつかぶせれば
= hoge("aaa");
といった形で参照・実行することができるのですねー。
でも、なぜ「=tr;」といった形では実行されるのに、
「=tr("aaa");」では実行されないのでしょうか???
「return funcion」
関数を返す形はあまりなじみがなかったもので、
これを機に勉強してみます!
どうもありがとうございました。
No.2
- 回答日時:
プロパティ ではなく パラメータ のことだと思いますが,
そういう細かいことはどうでも良いとして,
> _root.onMouseDown= ???
ですよね。
私も _root.onMouseDown= ??? 状態です。
以前私も考えたことがあって,少しだけチャレンジしてみましたが,
今も _root.onMouseDown= ??? 状態です。
??? の部分には関数名または関数自体を入れなければならないので,
_root.onMouseDown = tr;
しかできません。
_root.onMouseDown = tr("FLASH");
これでは,関数の代入ではなくて実行になってしまいますし,
function _root.onMouseDown("FLASH");
これでは Flashに怒られるだけですし,
_root.onMouseDown = function tr("FLASH");
これでも怒られます。
やっぱり書かれていらっしゃるように,
_root.onMouseDown=function(){
tr("aaa");
}
または,改行を取っただけで同じですが,
_root.onMouseDown=function(){tr("aaa")};
のように書くしかないと思います。
私も個人的にそう思うだけで,"全く自信はありません" が,そう思います。
過去もそこら辺であきらめましたし,
今回のご質問を見て再チャレンジしてみましたが,やっぱりあきらめました。
思うのですが,
LoadVars.onLoad = function( ) { };
のような場合,function( ) の ( ) 内に入る物って決まっていますよね。
LoadVars.onLoad = function( ) の場合,
( )内にはロードが成功したかしないかという ブール値 が入ります。
仮に別の方法でできたとしても,
引数は 「ない」 とか 「ブール値」 とか 「ターゲット」 とか 「ロードしたデータ」 とか言う感じで,
すでに決まってしまっているのではないでしょうか?
とも思います。
イベントハンドラメソッド や イベントリスナー は,
そういう特殊な扱いだと勝手に(あくまでも勝手に)認識しています。
ぜんぜん参考にならない回答だとは思いますが...。
>ぜんぜん参考にならない回答だとは思いますが...。
いえいえ!丁寧にありがとうございます!
>プロパティ ではなく パラメータ のことだと思いますが,
すいません。わかりづらい文章で。。。
1. _root.onMouseDown = tr;
この代入の仕方は、
他MCなどのタイムラインからこのtr関数を参照する場合
this.onPress = _root.tr;
などと、ルートのプロパティを参照している形になるので、
この代入の仕方を「関数をプロパティで代入」と世間では呼ばれているのかなー。。。
などと推測してみたのです。。
ありがとうございました!
No.1
- 回答日時:
関数を実行するときは
[関数までのパス.(省略可)]関数名([引数1,引数2,・・・]);
という形になります。関数名の括弧内には実行する際に関数に対して任意の値を入れることが出来ます。
例えば
function tr(str:String){
trace(str);
}
tr("aaa");
このように関数を実行するときに括弧内に値を指定すれば、関数trないに指定した値が代入され、実行されます。
↑の例では関数trないの変数strに文字列「aaa」が代入される形になります。また引数はいくつでも設定できますので、
function move(tar:MovieClip,val:Number){
tar._x = val;
}
move(_root.symbol,100);
とすればルートに配置されている「symbol」と言うインスタンス名のMCのX座標を100にする、というようになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- 数学 2*2の行列に対して固有値の最大実部を与えるkの値を求めたい 3 2022/11/08 16:26
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- スピーカー・コンポ・ステレオ オンキョーアンプA819RSのバイアス電圧が信号入力時に大きく変動する。(Rチャンネルのみ) 2 2022/10/21 13:31
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
else if文の順序を変えることに...
-
node* ってなんなのでしょうか?
-
Excel VBAで読み込んだテキスト...
-
python ボタンを押すと複数の関...
-
PYTHONのtkinterについて
-
PythonでSetWindowPosを使うに...
-
FLASHで「かるた」を作りたいの...
-
オブジェクトのランダムな位置表示
-
二分探索木のプログラム
-
プログラミング、アーキテクチ...
-
photoshopで書いた四角の枠の中...
-
VBAで改行の入ったデータの正規...
-
五芒星は、悪魔崇拝とどういう...
-
ExcelでVBAを利用してオートシ...
-
C言語でのマウスを移動とマウス...
-
RPG(AS400)の本、サイトってあ...
-
HTMLのtextbox類に文字を残す
-
VB6.0 でメニューを作りたいん...
-
UWSCのBTN関数について。
-
YOASOBI
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
四乗根を英語で言うと・・・
-
pythonの画像の貼り付けについて
-
SNMPの標準MIBについて
-
PythonでSetWindowPosを使うに...
-
pythonのグローバル変数
-
ボタンの上にマウスを置くと虫...
-
関数をプロパティとして代入する際
-
ADに参加していないPCからADサ...
-
レイヤーに配置されたムービー...
-
[FlashMX2004]動的にファイルを...
-
メニュースクロール
-
パーセントで配置したフラッシ...
-
Flashの表示サイズを動的に変更...
-
スライドショーのフェードイン...
-
swfがきちんと動作しない!
-
フルウィンドウのFlash Firefox...
おすすめ情報