メイン 迷える子羊の部屋【初心者専用】
関数クロージャのthis参照について | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| MAETOMO | Åê¹ÆNo.35213 投稿日時: 2007-9-24 15:05 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
MacOSX10.4 FlashCS3 |
関数クロージャのthis参照について 下記のadobeのヘルプを見ながら関数クロージャのthis参照について調べていて
ヘルプには 関数クロージャの場合、this 参照は汎用です。すなわち、この関数が呼び出された時点で関連付けられているオブジェクトが何であっても、そのオブジェクトを参照します。 と、書かれていますが、"そのオブジェクト"は何を指すのかいまいち分からないでいます 実際下記のコード内の[1]の所にtrace(this)を書いてみると[object global] と出力されますが それがどのオブジェクトなのかよく分かりません "この関数が呼び出された時点で関連付けられているオブジェクト"と書かれているので myProduct、もしくはbarを指しているのかと思いましたが それを確かめる方法も分からないでいます どなたか教えてもらえないでしょうか よろしくお願いします 参考サイト http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/js/html/wwhelp.htm function foo():Function { var x:int = 40; function rectArea(y:int):int // 定義された関数クロージャ { trace(this)//[1] 出力 [object global] return x * y } return rectArea; } function bar():void { var x:int = 2; var y:int = 4; var myProduct:Function = foo(); trace(myProduct(4)); // 呼び出された関数クロージャ } bar(); // 160 |
| ニノミヤ カズノリ | Åê¹ÆNo.35214 投稿日時: 2007-9-24 17:51 |
職人 ![]() ![]() 居住地: 東京 投稿: 430
使用環境:
CS4 .4.11, .5.7 XP Pro(sp3)Flash Player 10,0,22,87, AIR 1.5.1, IE 5.5 & 6 & 7 & 8, Firefox 2.0.0.20 & 3.0.11 & 3.5, Opera 9.64, Safari 4, Google Chrome 2.0.172.31, Netscape 7.1 |
Re: 関数クロージャのthis参照について 引用:
実際下記のコード内の[1]の所にtrace(this)を書いてみると[object global] と出力されますが 本来、値が返ってくる事自体不思議ですが、AS3.0では[object global]が返ってくるようですね。 ちなみにAS2.0で同じ様な事をした場合、undefinedが返ってきます。 この様な結果が返ってくる理由は、 barメソッド内で宣言しているmyProduct関数がオブジェクトのメソッドではないからです。 (AS3.0では一時的にglobalのメソッドにする為、thisを参照すると[object global]が返ってくるのかもしれません。 しかし、実際のところ詳しい事はわかりません。) 例えばこんな風にしてみたら、thisの結果が変わります。 fooは変更なし 結果: または、 結果: |
| 野中文雄 | Åê¹ÆNo.35221 投稿日時: 2007-9-25 2:49 |
ちょんまげら ![]() ![]() 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 関数クロージャのthis参照について まず、スクリプトのご質問は[コーダーズルーム]、とくにActionScript 3.0については[ActionScript 3.0特設会議室]にされるのが適切でしょう。後者に投稿するのでなければ、ActionScriptのバージョンも明記すべきです。
ローカルに定義された関数を呼出した場合には、クロージャは生成されません。[object global]というのは、特定のオブジェクトが参照されていないことを示します。 参考: akihiro kamijo「thisとクロージャ」 引用: MAETOMOさんは書きました: クロージャが生成される場合とされない場合との比較は、以下のスクリプトをお試しください。 なお、「参考サイト」としてLiveDocsを丸々引用されるのは、現状のご説明にはなりません。そのすべてを読破され、完全に理解されたのであれば、ご質問の余地はないはずです。→【マニュアル(参考書)のとおりにやりました】 引用: |
| MAETOMO | Åê¹ÆNo.35237 投稿日時: 2007-9-26 1:59 |
新米 ![]() ![]() 居住地: 投稿: 4
使用環境:
MacOSX10.4 FlashCS3 |
Re: 関数クロージャのthis参照について ニノミヤさん、野中さんありがとうございます
とても参考になりました また、今後は適切に質問するように気をつけます 前回質問した時もそうでしたが、説明が不十分でした・・・ 現在adobeのAS3のヘルプを順番に読み進めながら勉強していた所なんですが その関数クロージャの解説にあるコードを使い、いろんな場所でtrace(this)を書いて thisが何を参照するのか調べていたのですが、[1]の箇所はthisが何を参照しているのか 分からなくて質問させてもらいました ローカルに定義された関数を呼び出した場合、クロージャは生成されないんですね また、akihiro kamijoさんの"thisとクロージャ"も参考になりました ニノミヤさん、野中さんの答えてくださった事と、kamijoさんのサイトを含めて 参考にさせてもらい、まとめてみると、クラスに定義されたメソッドでも無名関数の場合 また、クラスのメソッドとして定義されたものではないメソッド内で定義された 関数のthisに対するクロージャは生成されないと解釈したのですが、正しいでしょうか? |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



ログイン




CS4
.4.11,
XP Pro(sp3)



