メイン コーダーズルーム【スクリプト系】 自作クラスの中のXMLオブジェクト | 投稿するにはまず登録を |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
Fumio | Åê¹ÆNo.13635 投稿日時: 2004-12-25 12:40 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
|
Re: 自作クラスの中のXMLオブジェクト まずは、動作して何よりです。
以下のご質問にお答えするには、XMLインスタンスxmlObjにコールバック関数として設定するメソッドxmlObjToString()の中の、以下のステートメントにご注目いだくとよいでしょう。
two_lineさんは書きました: まず、ActionScript 2.0クラス定義内では、参照先を省略した場合、this参照が自動的に補われます[*1]。ここで注意しなければならないのは、コールバック関数のように、オブジェクトインスタンスに対して設定された関数ブロック({})内のthis参照です。 上記ステートメントからわかることは、コールバック関数内のthisは、その「設定先」であるxmlObjを参照するということです。つまり、thisはクラスXMLObjのインスタンスを参照しません。 ところが、コールバック関数内でもうひとつ参照したいcontentsは、XMLObjクラスのプロパティです。xmlObjもXMLObjクラスのプロパティですから、感覚的にいえば自分の親(タイムラインなら_parent)の参照を得る必要があります。しかし、タイムラインと異なり、プロパティからその持ち主(親)を参照する手段がありません。 そこで、xmlObjプロパティの持ち主であるXMLObjクラスのインスタンス(this)を、xmlObjのプロパティとして設定することが考えられます。これが、xmlObj.ownerです。(1)のステートメントは、この設定を行っています。 引用: (1)の記述は何故必要なのでしょうか。 コールバック関数内のthisは、関数の設定先であるxmlObjプロパティを参照しますので、this.toString()はxmlObj.toString()と同じ意味になります。ただし、コールバック関数内でxmlObj.toString()と記述すると、thisが補われて、this.xmlObj.toString()と解釈されます。thisはxmlObjプロパティを指す訳ですから、その中にさらにxmlObjというプロパティを探しても存在しません(undefinedと認識されます)。 引用: (2)の記述についてです。これもまた、今自分なりの答が出ました。 実は、上記ステートメントには、もうひとつポイントがあります。xmlObj.ownerとせずに、xmlObj["owner"]と記述した点です。 xmlObjプロパティは、ActionScript 2.0シンタックスにより、XMLクラスで型づけされています。そのため、xmlObj.ownerと記述すると、XMLクラスにそのようなプロパティが存在しないので、コンパイルエラーになってしまいます。 厳密な「作法」に従うなら、xmlObjのクラスをXMLのサブクラスとして定義することになるところです。しかし、今回は少し面倒なので、裏技を使用しています。配列アクセス演算子([])を使ってプロパティにアクセスすれば、型チェックが回避できるのです。 ただし、この裏技で設定したプロパティにアクセスするには、つねに配列アクセス演算子を使用する必要があります((2)のステートメントは、そのため配列アクセス演算子を使用しています)。また、この手法の多用は、型指定を無意味にするので、もちろんお勧めしません。 なお、Delegateクラスを用いれば、コールバック関数のthis参照先を変更できるので、この裏技を使用する必要もなく「スマート」かなと考えた次第です。 最後に、機種依存文字は使用を避けましょう。 _____ [*1] この点は、タイムラインに記述したスクリプトとは異なります。 |
フラット表示 | 前のトピック | 次のトピック |
題名 | 投稿者 | 日時 |
---|---|---|
自作クラスの中のXMLオブジェクト | two_line | 2004-12-24 23:01 |
Re: 自作クラスの中のXMLオブジェクト | Fumio | 2004-12-25 0:11 |
Re: 自作クラスの中のXMLオブジェクト | Fumio | 2004-12-25 0:25 |
Re: 自作クラスの中のXMLオブジェクト | two_line | 2004-12-25 11:26 |
» Re: 自作クラスの中のXMLオブジェクト | Fumio | 2004-12-25 12:40 |
Re: 自作クラスの中のXMLオブジェクト | two_line | 2004-12-29 11:21 |
投稿するにはまず登録を | |