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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     「値による代入」と「参照による代入」について
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
youich
Åê¹ÆNo.12758
投稿日時: 2004-11-27 0:13
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: 「値による代入」と「参照による代入」について
引用:

onsk72さんは書きました:
オブジェクトや配列の「値による代入」をしたいのですが、代入演算子「=」で代入すると、
「参照による代入」になってしまいますよね?

-----------------------------------------------------------
var obj1:Object = new Object();
obj1.test = "あいうえお";
var obj2:Object = obj1;
obj2.test = "かきくけこ";
trace("obj1.test = " + obj1.test); //出力:obj1.test= かきくけこ
trace("obj2.test = " + obj2.test); //出力:obj2.test= かきくけこ
-----------------------------------------------------------

新しくオブジェクトや配列を定義して、中身を1つずつ代入すれば参照ではなくなるのですが、
もっと簡単な方法はないのでしょうか?

mx.utilsにObjectCopyというクラスがありました。
var dstObject = mx.utils.ObjectCopy.copy(srcObject);
という使い方のようです。

しかしObjectCopyのソースを見ていただくと解りますが
インスタンスレベルで定義されたfunctionはコピーされません。
またArrayのArrayはシャロウーコピーになります。
obj = {};
obj.func = function(){
	trace('obj.func');
}
obj.arr= [['hello'],[['mac'],['Apple']]];


oo = mx.utils.ObjectCopy.copy(obj);

trace(oo.arr); // hello,mac,Apple
obj.arr[1][0] = "OSX";
trace(oo.arr); // hello,OSX,Apple
oo.func(); // not execute!!


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

関たかまさ
Åê¹ÆNo.12643
投稿日時: 2004-11-24 19:01
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: 「値による代入」と「参照による代入」について
そういえば私も文字列をsplit()なんかで再配置したりよくしてました。。。

すぐ思いつかなかった
onsk72
Åê¹ÆNo.12641
投稿日時: 2004-11-24 18:45
新米
居住地:
投稿: 4
使用環境:
Pro XP-Pro(SP2)
Re: 「値による代入」と「参照による代入」について
引用:

ike_chanさんは書きました:
元になる配列を変えずに、
複製されたものだけを変えたいのであれば、
newArray = theArray.concat();
という手もあります。


そういう手がありました!
ありがとうございます。

くだらない質問で、失礼しました。
ike_chan
Åê¹ÆNo.12639
投稿日時: 2004-11-24 18:17
新米
居住地: 大阪
投稿: 14
使用環境:
Windows2000
FlashMX
FlashMX2004
Re: 「値による代入」と「参照による代入」について
元になる配列を変えずに、
複製されたものだけを変えたいのであれば、
newArray = theArray.concat();
という手もあります。
例えば、
メインタイムラインに外部txtなんかから読み込んだ値を配列に代入して、
forループの中でattachMovieしたmcに渡して、
それぞれのmcで別の処理をさせたい時なんかに私はよく使いますが、
そういうお話ではないんでしょうか?
でしたら、ゴメンナサイ。。
関たかまさ
Åê¹ÆNo.12638
投稿日時: 2004-11-24 18:05
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: 「値による代入」と「参照による代入」について
結局はインスタンスを作成することになると思うんですけどねぇ。。

ちなみに自分だったらこんな感じで処理しますね。

var obj1:Object = new Object();
obj1.test = "あいうえお";
//var obj2:Object = obj1;
var obj2:Object = new Object();
for(prop in obj1){
  obj2[prop] = obj1[prop];
}
obj2.test = "かきくけこ";
trace("obj1.test = " + obj1.test); //出力:obj1.test= かきくけこ
trace("obj2.test = " + obj2.test); //出力:obj2.test= かきくけこ
onsk72
Åê¹ÆNo.12634
投稿日時: 2004-11-24 17:28
新米
居住地:
投稿: 4
使用環境:
Pro XP-Pro(SP2)
Re: 「値による代入」と「参照による代入」について
引用:
代入演算子などの使い方がわかってらっしゃるようなんですが、もうちょっと具体的に何をしたいのか教えてもらえませんか?

obj2を定義するのであれば、新しいObjectを作れば良いだけですし、変数を使いまわしたいのであればループ処理内で定義したりすれば問題は特段見当たらないのですが・・・

JavaっていうかOOP的には変数の使いまわしは避けようってのもありますしね。


使い回しをするわけではありません。
Stringなどの代入と同じように、中身をコピーして使いたいだけなのです。
(元のデータはそのままで、コピーしたデータのみを変更したい)

おっしゃるとおり、ループ処理で1つずつコピーすれば、何の問題もありません。
が、もっと簡単な方法がないかと思いまして、投稿させていただきました。
関たかまさ
Åê¹ÆNo.12631
投稿日時: 2004-11-24 16:41
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: 「値による代入」と「参照による代入」について
こんにちわ

代入演算子などの使い方がわかってらっしゃるようなんですが、もうちょっと具体的に何をしたいのか教えてもらえませんか?

obj2を定義するのであれば、新しいObjectを作れば良いだけですし、変数を使いまわしたいのであればループ処理内で定義したりすれば問題は特段見当たらないのですが・・・

JavaっていうかOOP的には変数の使いまわしは避けようってのもありますしね。
onsk72
Åê¹ÆNo.12628
投稿日時: 2004-11-24 16:06
新米
居住地:
投稿: 4
使用環境:
Pro XP-Pro(SP2)
「値による代入」と「参照による代入」について
オブジェクトや配列の「値による代入」をしたいのですが、代入演算子「=」で代入すると、
「参照による代入」になってしまいますよね?

-----------------------------------------------------------
var obj1:Object = new Object();
obj1.test = "あいうえお";
var obj2:Object = obj1;
obj2.test = "かきくけこ";
trace("obj1.test = " + obj1.test); //出力:obj1.test= かきくけこ
trace("obj2.test = " + obj2.test); //出力:obj2.test= かきくけこ
-----------------------------------------------------------

新しくオブジェクトや配列を定義して、中身を1つずつ代入すれば参照ではなくなるのですが、
もっと簡単な方法はないのでしょうか?
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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