人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ActionScript3のObjectクラスの結合について質問させて下さい。

知りたいのは以下のコードで得られるobj3経由でobj1,obj2のプロパティにアクセスする方法です。
個人的にはobj3["name"], obj3[0]["age"]などでアクセスできる事を
期待したのですが駄目でした。
---
var obj1:Object = { name:"taichino", age:25 };
var obj2:Object = { sex:"male", height:185 };
var obj3:Object = obj1 + obj2; // {name:"taichino",age:25,sex:"male",height:185}を期待
---

fdbでobj3の内容を出力したところ以下のように出力されます。
---
(fdb) p obj3.
$1 = obj3 = "[object Object][object Object]"
---

またobj1,obj2から{name:"taichino",age:25,sex:"male",height:185}を
作る方法で以下よりも良い物があれば、合わせて教えて頂けるとありがたいです。
var obj3:Object = obj1;
for (var key:String in obj2) {
obj3[key] = obj2[key];
}


以上、よろしくお願いします。

●質問者: taichino
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Key male name object SEX
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● IlO10l0Il
●35ポイント

http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b...

こちらはいかがでしょうか。

◎質問者からの返答

ありがとうございます。

ただ、obj3のプロパティにアクセスする方法がやはり解りません。

obj3は結合配列ではないような気がします。

(キーによるアクセスが出来ないような気がします。)

さらに、例えば

for each (var item:Object in obj3) {

trace(item);

}

のように内容を列挙しようとしてもできません。

またマニュアルの+演算子の項目を見てみたのですが、

Object同士の+結合が何を表すのかという事は記述されていませんでした。

一体obj3は何者なんでしょうか。。


2 ● りゅう
●35ポイント

出力結果からすると、obj3の中味は文字列になっています。

マニュアルの説明には+演算子のオペレータが両方とも数値でも文字列でもない場合は数値に変換されるとあるのですが、実際は両方とも文字列化されて連結されるようです。


http://help.adobe.com/ja_JP/AS3LCR/Flash_10.0/operators.html#add...

1 つの式がストリングの場合、他の式はすべてストリングに変換され、加算の代わりに連結されます。式がストリングでも数値でもない場合は、Flash? Player により数値に変換されます。


obj1とobj2を合成したオブジェクトを作る方法ですが、基本的にはforでプロパティをコピーして行くしかありません。

合成できるオブジェクトというクラスを作ると見た目的には良い感じになります。

class MergedObject
{
 public function merge(obj) : void 
 {
 for (var key:String in obj) {
 this[key] = obj[key];
 }
 }
}

var obj3:MergedObject = new MergedObject();
obj3.merge(obj1);
obj3.merge(obj2);
◎質問者からの返答

ありがとうございます。

やはりプロパティを1つずつコピーしないといけないのですね。

了解致しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ