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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     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() ) ;
これを実行すると。
[object Object]
こうなるんですが。



例えばインスタンス化されたMCのターゲットパスの取得でしたら、これではダメでしょうか?

trace(test_mc._target);


野中文雄
Åê¹ÆNo.6542
投稿日時: 2004-4-24 20:25
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Objectの一意的な値
「一意」の値なら、よいのですか?
function MyObject() {
    this.ID = super.toString().split("]").join(" #")
        +(MyObject.serialNum++)+"]";
}
MyObject.prototype = new Object();
MyObject.prototype.toString = function() {
	return this.ID;
};
MyObject.serialNum = 0;
// テスト
o0 = new MyObject();
o1 = new MyObject();
o2 = new MyObject();
trace([o0, o1, o2]);
// [出力]パネルの表示
[object Object #0],[object Object #1],[object Object #2]

引用:
tamori2004さんは書きました:
trace( new Object() ) ;
これを実行すると。
[object Object]
こうなるんですが。
...
一意的な値を取得する事はできないでしょうか?
例えば、物理メモリーアドレスとか、


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

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変数であるということは、既に知ってるいるので、これ以上知る必要はないと思うのですが。




----------------
(C)SalvoxStudioStation

野中文雄
Åê¹ÆNo.6858
投稿日時: 2004-5-4 11:45
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: そりゃ、無理でんがな・・・。
姑の突込みのようで恐縮ですが、若干気づいた点と補足(蛇足)を。

「関数をトレース」と表現すると、つぎのようなステートメントをイメージしてしまいます。
trace(Object);  // 出力: [type Function]

以下のステートメントの出力対象は、どちらも「インスタンス化された」Objectクラスのオブジェクトであることに変わりはありません。前の例がObjectインスタンスを変数に格納しないため、メモリに保持されないのに対して、後の例はタイムライン変数_root.objに代入しているという違いがあるだけです。
引用:
salvoxさんは書きました:
trace( new Object() );


_root.obj = new Object();
trace( _root.obj );

も、結果は同じ、[object Object]になりますよ。

違いは、前者は、FunctionオブジェクトのObject()メソッド、つまり関数をトレースしてるのに対して、後者は、インスタンス化された、
つまり、Object()が生み出した、_root.objというオブジェクトを
トレースしてるかの違いだけですよ。

生成したオブジェクトインスタンスと、それを格納した変数とは区別することが必要です。

以下のステートメントは、ひとつのObjectインスタンスの参照をふたつの変数に格納しています。生成されたオブジェクトはあくまでひとつで、そのインスタンスをふたつの変数がともに「参照」しているに過ぎません。同じ銀行預金口座を、新宿支店で残高確認しても渋谷支店で見てもまったく同じです。
_root.obj = _root.anotherObj = new Object();

したがって、オブジェクトの格納された変数がわかったとしても、「一意」になるとはかぎらないのです。口座をどこに開設したかに相当するオブジェクトのアドレスポインタを知る方法は、salvoxさんのいわれるとおり、Flashには存在しません。
引用:
だから、_root.obj = new Object() とやった、この場合に
一意の値は、_root.obj変数であるということは、既に知ってるいるので、これ以上知る必要はないと思うのですが。


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

youich
Åê¹ÆNo.6864
投稿日時: 2004-5-4 16:10
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: Objectの一意的な値
引用:

tamori2004さんは書きました:
trace( new Object() ) ;
これを実行すると。
[object Object]
こうなるんですが。
インスタンス化されたムービクリップのtargetPathのような
一意的な値を取得する事はできないでしょうか?

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メソッドが呼び出されてるだけです。

Object.prototype.toString = function(){
    return "I am a Object";
}
trace( new Object());

//I am a Object



----------------
- yo

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

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