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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ArrayClassみたいな独自クラスをつくりたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ken1kun
Åê¹ÆNo.22976
投稿日時: 2006-1-20 14:14
半人前
居住地:
投稿: 52
使用環境:
WinXP,Flash CS3 + おもにv9書出
ArrayClassみたいな独自クラスをつくりたい
初歩的な質問でもうしわけありません。

Array Classの例
----------------------------
var tmpArray = new Array();
trace("出力結果")
trace(tmpArray);
tmpArray = [1,2,3,4,5];
trace(tmpArray);

-出力----------------------------
出力結果

1,2,3
-----------------------------

Array Classを上に書きましたように
やりますと、newしたその参照?(tmpArray)をtraceすると
中身を出力できますが

通常独自のクラス、たとえば
----------------------------
class myArary(){
}
var tmpArray = new myArray();
trace(tmpArray)

-出力----------------------------
出力結果
[object object]
-----------------------------
newしたその参照に値を入れてしまうと
参照が上書きされてしまうし
Array Classのようにできません。

どうやったら、Array Classのようなクラスをつくれるのでしょうか?
ご教授願います。
kool_it
Åê¹ÆNo.22978
投稿日時: 2006-1-20 14:36
常連
居住地: 東京
投稿: 92
使用環境:
win7::Win2K:Flash CS5.5:
10.7:Flash CS5.5:
Re: ArrayClassみたいな独自クラスをつくりたい
クラスにtoStringメソッドを実装すればよいです。


----------------
---------------------------------------
ActionScript Junky!
---------------------------------------

野中文雄
Åê¹ÆNo.22979
投稿日時: 2006-1-20 14:41
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ArrayClassみたいな独自クラスをつくりたい
カスタムクラスの出力を変更するには、toString()メソッドを独自定義します。
引用:
ken1kunさんは書きました:
Array Classを上に書きましたように
やりますと、newしたその参照?(tmpArray)をtraceすると
中身を出力できますが

通常独自のクラス、たとえば
// ActionScript 2.0クラス定義ファイル: myArray.as
// class myArary(){
class myArray {
	function toString() {
		return "anything you want";
	}
}
// Flashムービー(swf)
// フレームアクション
var tmpArray = new myArray();
trace(tmpArray)

配列も、参照は上書きされます。以下のふたつのステートメントは、同じ処理です。
// tmpArray = [1,2,3,4,5];
tmpArray = new Array(1, 2, 3, 4, 5);

new以外の演算子によってインスタンスの生成(リテラル記述)をすることは、Array([])とObject({})以外はできないと思います。
引用:
newしたその参照に値を入れてしまうと
参照が上書きされてしまうし
Array Classのようにできません。


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

ken1kun
Åê¹ÆNo.22984
投稿日時: 2006-1-20 15:39
半人前
居住地:
投稿: 52
使用環境:
WinXP,Flash CS3 + おもにv9書出
Re: ArrayClassみたいな独自クラスをつくりたい
Kool_itさん、野中さん ご返信ありがとうございます。

さらにご質問なのですが
以下のようにscriptを書きまして

class Test{
	var value:Object;
	function Test(o:Object){
		value = o;
	};
	function toString() {
		return value; 
	}
}

var tmpObj:Object = {x:0,y:0};
var myObj:Object = {p1:tmpObj,p2:tmpObj,p3:tmpObj};
var tmpTest = new Test(myObj);
trace(tmpTest)
trace(tmpTest["p1"])


//trace出力結果
[type Object]
undefined

この部分で
trace(tmpTest["p1"])
toStringで返してくるObjectの中のp1のデータを
取り出そうとするとundefinedになってしまいます。
また、tmpTest["p1"]と呼ぶと、toString()が呼ばれません。

先のArrayの話にもどり以下のように書くと
var myArray = new Array({x:0,y:0},{x:0,y:0},{x:0,y:0})
trace(myArray[0]["x"])

結果
0

配列内objectを取り出せます。
これはどういう違いなのですか?

初心者で本当に申し訳ありません。
「ここ読めば」、などどこか参考になるページのURLをご紹介いただくだけでもかまいません。

よろしくお願いいたします。
野中文雄
Åê¹ÆNo.22989
投稿日時: 2006-1-20 16:22
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ArrayClassみたいな独自クラスをつくりたい
trace()ステートメントは、引数を文字列表現に変換して、[出力]します。その表示される文字列と、引数を直接参照した場合に取出される値とは別ですよ。以下のスクリプトで、ふたつめのtrace()ステートメントの[出力]が、"undefined"の"u"でなく、"undefined"となる理由をお考えください。
// var a = "undefined";
var a;
trace(a);
trace(a.substring(0, 1));

引用:
ken1kunさんは書きました:
さらにご質問なのですが
以下のようにscriptを書きまして

trace()の話とインスタンス参照へのアクセスの話は、別途に考える必要があります。
class Test {
	var p1:Object;
	var p2:Object;
	var p3:Object;
	function Test(o1:Object, o2:Object, o3:Object) {
		p1 = o1;
		p2 = o1;
		p3 = o1;
	}
	function toString():String {
		return [p1, p2, p3].toString();
	}
}
var tmpObj:Object = {x:0, y:0};
var myObj:Object = {p1:tmpObj, p2:tmpObj, p3:tmpObj};
var tmpTest = new Test(tmpObj, tmpObj, tmpObj);
trace(tmpTest);
trace(tmpTest["p1"]);
trace(tmpTest["p1"]["x"]);

//trace出力結果
[object Object],[object Object],[object Object]
[object Object]
0
引用:
この部分で
trace(tmpTest["p1"])
toStringで返してくるObjectの中のp1のデータを
取り出そうとするとundefinedになってしまいます。
また、tmpTest["p1"]と呼ぶと、toString()が呼ばれません。

配列と同じように実装するというのは、かなり難易度の高い課題で、配列アクセス演算子によるインスタンス生成やコンストラクタのオーバーロード(多重定義)など実質的に困難と思われるものもあります。

trace()の[出力]は、あくまでデバッグ時の便に過ぎません。まずは、通常のクラスのプロパティやメソッドの定義で、ご希望の機能を満たすようお考えになるのがよろしいいかと思われます。
引用:
「ここ読めば」、などどこか参考になるページのURLをご紹介いただくだけでもかまいません。


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

ken1kun
Åê¹ÆNo.23004
投稿日時: 2006-1-20 18:23
半人前
居住地:
投稿: 52
使用環境:
WinXP,Flash CS3 + おもにv9書出
Re: ArrayClassみたいな独自クラスをつくりたい
野中さん ご返信ありがとうございます。

書いていただいたTest classで
意味がわかった気がします。

引用:
配列と同じように実装するというのは、かなり難易度の高い課題で、配列アクセス演算子によるインスタンス生成やコンストラクタのオーバーロード(多重定義)など実質的に困難と思われるものもあります。通常のクラスのプロパティやメソッドの定義で、ご希望の機能を満たすようお考えになるのがよろしいいかと思われます。

もいちど整理しシンプルなやりかたを考えようと思います。

ありがとうございました。
野中文雄
Åê¹ÆNo.23010
投稿日時: 2006-1-20 20:37
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ArrayClassみたいな独自クラスをつくりたい
trace()ステートメントでインスタンスの中身を確認したいという点につきましては、ObjectDumper.toString()メソッドを使われるとよいでしょう。
引用:
野中文雄は書きました:
trace()の話とインスタンス参照へのアクセスの話は、別途に考える必要があります。


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

ken1kun
Åê¹ÆNo.23090
投稿日時: 2006-1-24 18:15
半人前
居住地:
投稿: 52
使用環境:
WinXP,Flash CS3 + おもにv9書出
Re: ArrayClassみたいな独自クラスをつくりたい
野中さん、レスありがとうございます。
とても助けになりそうなクラスです。
ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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