Macromedia Flash非公式テクニカルノート

super

ID: FN0203004 Product: Flash

Platform: All
Version: MX

シンタックス
super.method([引数1, ..., 引数N])
super([引数1, ..., 引数N])

引数
method  スーパークラスの呼出すメソッド

引数  オプションとなる引数で、スーパークラスの側のメソッド(第1シンタックス)、またはスーパークラスのコンストラクタ関数(シンタックス2)に渡します。

戻り値
どちらのシンタックスも'function'を呼出します。'function'は、値を返すことがあります。

説明
演算子: 第1シンタックス形式は、オブジェクトのメソッド本文でスーパークラスの側のメソッドを呼出すために使われます。そして、オプションとして引数(引数1... 引数N)をスーパークラスのメソッドに渡します。この形式は、スーパークラスのメソッドに対して追加的な処理を行うサブクラスのメソッドを作成し、かつ本来の処理を実行するスーパークラスのメソッドを呼出したいときに有効です。

第2シンタックス形式は、コンストラクタ関数の本文でスーパークラスの側のコンストラクタ関数を呼出すときに用いられます。そして、オプションとして引数を渡すことができます。この形式は、追加的な初期化の処理を行うサブクラスを作成し、かつスーパークラスの初期化を実行するスーパークラスのコンストラクタを呼出したいときに有効です。


以下のサンプルでは、2つのクラスを作成します。ParentClassとChildClassで、それぞれにmethodというメソッドを定義します。それぞれのメソッド定義には、'trace'アクションがあり、出力ウィンドウにメッセージを送ります。最後の2行のコードは、ChildClassのインスタンスを生成し、そのメソッドmethodを実行します。

function ParentClass() {
}
ParentClass.prototype.method = function () {
   trace("ParentClass implementation of method");
};
function ChildClass() {
}
ChildClass.prototype = new ParentClass();
ChildClass.prototype.method = function () {
   trace("ChildClass implementation of method");
   super.method();
};
x = new ChildClass();
x.method();

以下が、出力ウィンドウの表示です。

ChildClass implementation of method
ParentClass implementation of method

以下のサンプルは、引数を'super'のコンストラクタに渡します。

function SuperClass(arg){
   trace("SuperClass constructor was passed " + arg);
}
function SubClass(arg){
   super(arg);
   trace("SubClass constructor");
}

[訳者註] このサンプルだけでは、SubClassのインスタンス生成やSuperClassの継承が行われません。以下の2行のステートメントを、追加する必要があります(なお、「ActionScript Dictionary errata」参照)。

SubClass.prototype = new SuperClass();
x = new SubClass("test");

[訳者註2] スーパークラスを継承するためには、'__proto__'プロパティを使うことも考えられます。けれど、サブクラスの'__proto__'プロパティにスーパークラスの'prototype'を設定した場合には、'super'演算子でコンストラクタ関数を呼出すことができません。スーパークラスのコンストラクタにより生成したオブジェクトインスタンスを設定すると、呼出し自体は可能になります。以下の第1ステートメントは'super'でSuperClassのコンストラクタ関数が呼出されますが、これをコメントアウトして第2ステートメントを有効にすると正しく呼出しができません。

SubClass.prototype.__proto__ = new SuperClass(); // コンストラクタが呼出せる
//SubClass.prototype.__proto__ = SuperClass.prototype; // コンストラクタが呼出せない
x = new SubClass("test");

[訳者註3] なお、'super'演算子によるスーパークラスの初期化と、そのメソッドの呼出しについては、併せて以下のノートをご参照ください。
superでスーパークラスのメソッドを実行する
__proto__による継承でsuperを使う

Player
Flash Player 6以降。

出典
ActionScript Dictionary(英語版)より邦訳(一部日本語版オンラインヘルプを元に補正)。

_____

作成者: 野中文雄
更新日: 2002年4月9日 若干の字句修正と注釈の追加
作成日: 2002年3月30日


Copyright © 2001 and beyond Fumio Nonaka All rights reserved.