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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ActionScript2.0で既存Classにメソッドを追加する方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
koike-xp
Åê¹ÆNo.2774
投稿日時: 2004-1-8 21:51
新米
居住地:
投稿: 2
使用環境:
windows2000 sp3
STUDIO MX 2004
(FLASH MX2004 Professional 7.0.1)
IE 6.0

ActionScript2.0で既存Classにメソッドを追加する方法
はじめまして、コイケと申します。
MX2004&ActionScript2.0にもだいぶなれてきたのですが、一つ困ったことが出てきました。
ActionScript1.0の時には既存Classにメソッドを追加すること
(String.prototype.XXXXXXと行った文法で既存Classにメソッドを追加するあれです。)
を良くやっていたのですが、ActionScript2.0の場合の書き方というものは存在するのでしょうか?
「prototype」を使用したActionScript1.0の方法でも一応ActionScript2.0で認識はするのですが、その場合、外部ファイルで定義するClass内でその定義した関数を使用しようとすると、そのメソッドはないというエラーが返ってきてしまいます。

これまで上の方法で沢山の部品を作ってきたので、どうしてStringに定義してしまいたいのです。

ご存じの方いらっしゃいましたら、おしえてください。
よろしくお願いいたします。


加藤達雄
Åê¹ÆNo.2781
投稿日時: 2004-1-9 2:20
新米
居住地: 東京
投稿: 24
使用環境:
Win XP Pro
MX Pro 2004
Re: ActionScript2.0で既存Classにメソッドを追加する方法
String.prototype.myMethod = function(){....}
の形で定義したメソッドをStringに型指定した変数に
用いることは残念ながらできないです。
その場合は型指定せずに変数を宣言するしかないのでは
ないでしょうか。
野中文雄
Åê¹ÆNo.2782
投稿日時: 2004-1-9 6:46
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ActionScript2.0で既存Classにメソッドを追加する方法
ActionScript 2.0では、既存のクラスを直接修正せず、サブクラスを定義することが王道になります。
引用:
koike-xpさんは書きました:
ActionScript1.0の時には既存Classにメソッドを追加すること
(String.prototype.XXXXXXと行った文法で既存Classにメソッドを追加するあれです。)
を良くやっていたのですが、ActionScript2.0の場合の書き方というものは存在するのでしょうか?
「prototype」を使用したActionScript1.0の方法でも一応ActionScript2.0で認識はするのですが、その場合、外部ファイルで定義するClass内でその定義した関数を使用しようとすると、そのメソッドはないというエラーが返ってきてしまいます。

// クラス定義ファイル: MyString.as
class MyString extends String {
	function MyString(_str:String) {
		super(_str);
	}
	function findAndReplace(from_str:String, to_str:String):String {
		return this.split(from_str).join(to_str);
	}
}

// Flashムービー: MyString.asと同階層に配置
// フレームアクション
var s:MyString = new MyString("Actionscript 2.0");
trace(s.findAndReplace("s", "S"));  // 出力: ActionScript 2.0

どうしてもprototypeに定義したい場合には、既存クラスを定義しているString.asに宣言を追加します。ただし、お勧めする方法ではありません。
// クラス定義ファイル: String.as
//****************************************************************************
// ActionScript Standard Library
// String object
//****************************************************************************

intrinsic class String
{
	function String(string:String);
	// [中略]
	// メソッドの宣言を追加
	function findAndReplace(from_str:String, to_str:String):String;
	static function fromCharCode():String;
	var length:Number;
}


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

koike-xp
Åê¹ÆNo.2783
投稿日時: 2004-1-9 11:28
新米
居住地:
投稿: 2
使用環境:
windows2000 sp3
STUDIO MX 2004
(FLASH MX2004 Professional 7.0.1)
IE 6.0

Re: ActionScript2.0で既存Classにメソッドを追加する方法
コイケです
TatsuoKatoさん Fumioさん お返事ありがとうございます。

TatsuoKatoさんの助言を元にやってみた結果、エラーが出なくなりました。

追加したメソッドを使用したい変数を
var test_str:String; と宣言していた部分を
var test_str = ""; というよう変更すると、エラーが出ずに追加したメソッドが実行出来ました。
今回は、これで対処しようと思います。
でもこれって、あまりよろしくない方法だろうなぁと思いますので、王道のサブクラス定義に順次移行していこうと思います。

ありがとうございました。
野中文雄
Åê¹ÆNo.2786
投稿日時: 2004-1-9 17:42
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ActionScript2.0で既存Classにメソッドを追加する方法
ActionScript 2.0でいく場合は、サブクラス定義ということです。ActionScript 1.0なら、まったく問題ないと思います。また、MX 2004だからActionScript 2.0を使用しないといけないということもありません。

ただ、1.0と2.0を混在させるときは、要注意です。混在は必ずしもお勧めしませんが、やむを得ないといえる場合もありそうです。
引用:
koike-xpさんは書きました:
var test_str = ""; というよう変更すると、エラーが出ずに追加したメソッドが実行出来ました。
今回は、これで対処しようと思います。
でもこれって、あまりよろしくない方法だろうなぁと思いますので、王道のサブクラス定義に順次移行していこうと思います。


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

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

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