トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     インスタンスについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
TJFORD
Åê¹ÆNo.36788
投稿日時: 2007-12-12 9:37
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
インスタンスについて
プロパティインスペクタでインスタンス名をつけてtraceする場合と、
クラスから作ったインスタンスをtraceすると出力内容が異なるのはなぜでしょうか。

(1)プロパティインスペクタにてインスタンスにインスタンス名mc
-----------------------------------------------------------
trace(mc);
出力:_level0.mc
-----------------------------------------------------------

(2)クラスからインスタンスを作成
-----------------------------------------------------------
var mc = new MC();
trace(mc);
出力:[object Object]
-----------------------------------------------------------

(1)はインスタンスそのものを指して、
(2)のmcはインスタンスを参照するobject型の変数ということでしょうか。

頭が混乱しています。
うまく説明できていないかもしれませんがよろしくお願いいたします。
ニノミヤ カズノリ
Åê¹ÆNo.36796
投稿日時: 2007-12-12 14:24
職人
居住地: 東京
投稿: 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: インスタンスについて
一つお聞きしたいのですが、
MCクラスは何か継承されているのでしょうか?
TJFORD
Åê¹ÆNo.36797
投稿日時: 2007-12-12 14:32
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: インスタンスについて
ご返信ありがとうございます。

今回は特に継承してません。
こんな感じでしょうか。
------------------------------
class MC{
function MC(){
}
}
------------------------------
ニノミヤ カズノリ
Åê¹ÆNo.36799
投稿日時: 2007-12-12 15:27
職人
居住地: 東京
投稿: 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: インスタンスについて
何故そうなるのか、
と言う解答にはなっていませんが、

インスタンスの戻り値はFlash側が決める事ですので気にする必要は無いと思います。
(MovieClip, Array, String, Number等)

[object Object]が返ってくる理由としては、
どんなクラスでもインスタンスの階層ルートにObjectが存在している為ではないでしょうか。
永井勝則
Åê¹ÆNo.36801
投稿日時: 2007-12-12 16:01
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: インスタンスについて
Flash CS3のAS3用ヘルプには
引用:
trace ステートメント内の引数に String 以外のデータ型が含まれている場合は、
trace 関数によって、そのデータ型に関連付けられた toString() メソッドが呼び出されます

とあります。

またコリン・ムック先生の「ActionScript for Flash MX」には
引用:

trace(value):グローバル関数
解決されたvalueの値がストリングでない場合は、出力ウィンドウに送られる前に、表3-2のルールにしたがって、ストリングに変換される。(P907より抜粋)

表3-2:ストリングへの変換
Object:そのオブジェクト上でtoString( )を呼び出した結果生じる値。デフォルトでは、オブジェクトのtoString( )メソッドは”[object Object]”を返す。
Movieclip:そのムービークリップインスタンスへのパス。
(P69より抜粋)

(いずれも永井訳)
と書かれています。
ま、Flash Playerのデバッグ版はこういうルールでやっています、
ということなのではないでしょうか?


----------------
永井勝則:
himco.jp :

ニノミヤ カズノリ
Åê¹ÆNo.36804
投稿日時: 2007-12-12 16:32
職人
居住地: 東京
投稿: 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: インスタンスについて
引用:
永井勝則さんは書きました:
またコリン・ムック先生の「ActionScript for Flash MX」には
引用:

trace(value):グローバル関数
解決されたvalueの値がストリングでない場合は、出力ウィンドウに送られる前に、表3-2のルールにしたがって、ストリングに変換される。(P907より抜粋)

表3-2:ストリングへの変換
Object:そのオブジェクト上でtoString( )を呼び出した結果生じる値。デフォルトでは、オブジェクトのtoString( )メソッドは”[object Object]”を返す。
Movieclip:そのムービークリップインスタンスへのパス。
(P69より抜粋)

なるほど、
デフォルトだと”[object Object]”を返すのは決まっているんですね。
AS3.0だとちゃんとクラス名を返してくれるのに…。

もしAS3.0風に返すとなると、
class MC {
	public function MC() {}
	
	public function toString():String {
		return "[object MC]";
	}
}

となる訳ですね。

あ、話がそれましたね。失礼しました。
野中文雄
Åê¹ÆNo.36805
投稿日時: 2007-12-12 16:56
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: インスタンスについて
デフォルトというか、Object.toString()メソッドをオーバーライド(再定義)していないクラスが多いからでしょうね。
// ActionScript 2.0フレームアクション
Object.prototype.toString = function() {
	return "Objectのサブクラスです";
};
var mc = new MC();
trace(mc);
trace(new Object());
trace(new Sound());

引用:
ニノミヤ カズノリさんは書きました:
なるほど、
デフォルトだと”[object Object]”を返すのは決まっているんですね。
AS3.0だとちゃんとクラス名を返してくれるのに…。


----------------
 

TJFORD
Åê¹ÆNo.37056
投稿日時: 2007-12-30 9:52
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: インスタンスについて
返信遅れて申し訳ありません。

タイミングを逃してしまったのと、野中さんの書き込みでこのスレッドはまとまったかなと思い、書き込みをしませんでした

みなさんの書き込みを拝見して自分なりの解釈になりますが、
trace();の中にムーピークリップがはいっているとそのムービークリップへのパスが出力されるという仕様になっている、こういった考えでよいのかなと思いました。

一点疑問があるのですが、野中さんの書き込みのなかのCodeで
Object.prototype.toString = ?
といった記述がありましたが、Objectクラスのprototypeというのは何を参照しているのでしょう?prototypeプロパティはそのクラスのスーパークラスを参照するのだと思うのですが、Objectのスーパークラスとは何になるのでしょうか?

参照:
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Flashドキュメンテーション:prototype (Object.prototype プロパティ)
http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=00002541.html
http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002585.html#wp663998

Flashドキュメンテーション:toString (Object.toString メソッド)
http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/js/html/wwhelp.htm?href=00002541.html
http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002588.html#wp667750

野中文雄
Åê¹ÆNo.37057
投稿日時: 2007-12-30 13:57
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: インスタンスについて
MovieClipクラスは例外的に、toString()メソッドをオーバーライドしていないようです。したがって、trace()関数がMovieClipインスタンスのパスを返すという処理は、Flash Playerが内部的に行っているものと推測します。その意味では、そういう「仕様になっている」といえるでしょう。
引用:
TJFORDさんは書きました:
trace();の中にムーピークリップがはいっているとそのムービークリップへのパスが出力されるという仕様になっている、こういった考えでよいのかなと思いました。

Object.prototypeプロパティの内容というのは、別のご質問「クラスファイル内でのインスタンス作成」と深く関わります。以下のノートなどを参考に、学習されることをお勧めします。「スーパークラスを参照する」という旨がドキュメントにも記載されていますが、正確とはいえないでしょう。
trace(Object.prototype.constructor === Object);
trace(MovieClip.prototype.constructor === MovieClip);

参考:「ActionScript 2.0と1.0の継承について
引用:
一点疑問があるのですが、野中さんの書き込みのなかのCodeで
Object.prototype.toString = ?
といった記述がありましたが、Objectクラスのprototypeというのは何を参照しているのでしょう?prototypeプロパティはそのクラスのスーパークラスを参照するのだと思うのですが、Objectのスーパークラスとは何になるのでしょうか?

なお、引用されたLiveDocsのURLが違っています。
引用:
参照:


----------------
 

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops