メイン コーダーズルーム【スクリプト系】 Objectの一意的な値 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
tamori2004 | Åê¹ÆNo.6484 投稿日時: 2004-4-22 20:46 |
新米 居住地: 投稿: 1
使用環境:
Win2k、Flash MX 2004 Pro |
Objectの一意的な値 trace( new Object() ) ;
これを実行すると。 [object Object] こうなるんですが。 インスタンス化されたムービクリップのtargetPathのような 一意的な値を取得する事はできないでしょうか? 例えば、物理メモリーアドレスとか、 valueOf、toLocaleString、__proto__など試して見たんですが みんな [object Object] これでした。 何か情報ありましたらお願いします。 |
ゲスト | Åê¹ÆNo.6500 投稿日時: 2004-4-23 14:15 |
Re: Objectの一意的な値 new Object()をいきなりトレースメソッドの引数にあてても、まだタイプが決まってなければ中身も決まっていない状態です。
引用: trace( new Object() ) ; 例えばインスタンス化されたMCのターゲットパスの取得でしたら、これではダメでしょうか? trace(test_mc._target); |
|
野中文雄 | Åê¹ÆNo.6542 投稿日時: 2004-4-24 20:25 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: Objectの一意的な値 「一意」の値なら、よいのですか?
引用: tamori2004さんは書きました: |
salvox | Åê¹ÆNo.6855 投稿日時: 2004-5-4 7:45 |
常連 居住地: 東京都 投稿: 73
使用環境:
Windows2000 FlashMX テキストエディター:EmEditor |
そりゃ、無理でんがな・・・。 trace( new Object() );
も _root.obj = new Object(); trace( _root.obj ); も、結果は同じ、[object Object]になりますよ。 違いは、前者は、FunctionオブジェクトのObject()メソッド、つまり関数をトレースしてるのに対して、後者は、インスタンス化された、 つまり、Object()が生み出した、_root.objというオブジェクトを トレースしてるかの違いだけですよ。 FlashMXのヘルプにも書いてあるんですが、 シンタックス:new Object([value]) [パラメータ] value オブジェクトに変換される数値、ブール値、またはストリング。このパラメータはオプションです。value を指定しないと、コンストラクタは定義済みのプロパティがない新しいオブジェクトを作成します。 、、っとあります。つまり、new Object()とやると、メソッドしか定義されてない空の変数(この場合は、オブジェクト型変数)を参照してるに他ならないんですよ。中に値が何もないので、trace()は、 その変数に割り当てられてる、型を出力するしか方法が見つからないんです。 例をあげると、空のダンボール箱を渡されて、『それは何?』 と聞かれてるようなもんです。『ダンボール箱』としか答えようがないですよね。中にミカンが入っていれば、『ミカンの入ったダンボール箱』と答えるはずです。 それと、ActionScriptは、あくまでも、Flashアプリケーション上に乗ってるスクリプト言語だということを忘れないで欲しいです。C言語やBASIC、COBOLと違って、PCのハード自体をいじれる権限は、まったくもっていないということ。変数のメモリーが格納される場所やタイミングもこちらでは指定できず、最終的には、機械語に翻訳済みのFlashアプリケーションが、どこのアドレスに格納するか、どのタイミングで格納するか決めてるんです。(それを意識しないですむのが、スクリプト言語の最大の特徴なんですが・・・) だから、_root.obj = new Object() とやった、この場合に 一意の値は、_root.obj変数であるということは、既に知ってるいるので、これ以上知る必要はないと思うのですが。
|
野中文雄 | Åê¹ÆNo.6858 投稿日時: 2004-5-4 11:45 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: そりゃ、無理でんがな・・・。 姑の突込みのようで恐縮ですが、若干気づいた点と補足(蛇足)を。
「関数をトレース」と表現すると、つぎのようなステートメントをイメージしてしまいます。
以下のステートメントの出力対象は、どちらも「インスタンス化された」Objectクラスのオブジェクトであることに変わりはありません。前の例がObjectインスタンスを変数に格納しないため、メモリに保持されないのに対して、後の例はタイムライン変数_root.objに代入しているという違いがあるだけです。 引用: salvoxさんは書きました: 生成したオブジェクトインスタンスと、それを格納した変数とは区別することが必要です。 以下のステートメントは、ひとつのObjectインスタンスの参照をふたつの変数に格納しています。生成されたオブジェクトはあくまでひとつで、そのインスタンスをふたつの変数がともに「参照」しているに過ぎません。同じ銀行預金口座を、新宿支店で残高確認しても渋谷支店で見てもまったく同じです。
したがって、オブジェクトの格納された変数がわかったとしても、「一意」になるとはかぎらないのです。口座をどこに開設したかに相当するオブジェクトのアドレスポインタを知る方法は、salvoxさんのいわれるとおり、Flashには存在しません。 引用: だから、_root.obj = new Object() とやった、この場合に |
youich | Åê¹ÆNo.6864 投稿日時: 2004-5-4 16:10 |
職人 居住地: kobe 投稿: 349
使用環境:
Tiger |
Re: Objectの一意的な値 引用:
pythonのidやjavaのhashCodeのようなものですね、 >>> print object() <object object at 0xbf3d0> >>> obj = object() >>> print obj,hex(id(obj)) <object object at 0xbf3d0> 0xbf3d0 //-------------------------------------------- System.out.println(new Object()); Object obj = new Object(); System.out.println(obj + ": " + Integer.toHexString(obj.hashCode())); //output java.lang.Object@1e7cc6 java.lang.Object@510dc2: 510dc2 Flashでもあってもおかしくないというか、そういうのはもってるはずですけど、ユーザーからはアクセスできないですね。 現実的には野中さんのサンプルのように自分でIDを振ることでしょうか。 ちなみにtraceに出力されるのは単にそのオブジェクトのtoStringメソッドが呼び出されてるだけです。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |