__ClassBase__

__ClassBase__

virtual private new __ClassBase__()

全てのクラスのスーパークラスのようなもの。(ライブラリ内にカプセル化されているため、ユーザが触ることはありません)
X.Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。

Members

static name :string

クラス名

Methods

static inherits(displayName, classSetting, props) → {__ClassBase__}

サブクラスを作ります。与える引数は X_Class.create と同じです。http://d.hatena.ne.jp/m-hiyama/20051018/1129605002

Parameters:
Name Type Argument Default Description
displayName string optional  クラスの名前
classSetting number optional  0 X_Class.POOL_OBJECT | X_Class.FINAL など
props object optional  {} このクラスのメンバと関数。コンストラクタは Constructor と書くこと
Returns:
Example
 var SubClass = SuperClass.inherits( 'Sub', X_Class.FINAL, { ... } );

static subClassOf(klass) → {boolean}

サブクラスか?調べます。

Parameters:
Name Type Description
klass __ClassBase__
Returns:
boolean

static superClassOf(klass) → {boolean}

スーパークラスか?調べます。

Parameters:
Name Type Description
klass __ClassBase__
Returns:
boolean

instanceOf(klass) → {boolean}

インスタンスのクラスか?またはスーパークラスか?調べる。
instanceof 構文をサポートしない環境(IE5以下)を想定する場合、必ずこのメソッドを使用すること。
クラスのインスタンスか?だけ調べたい場合は this.constructor === klass が高速。

Parameters:
Name Type Description
klass __ClassBase__ クラス定義
Returns:
boolean

kill()

全ての動的メンバを削除して、インスタンスを破棄する。
インスタンスが X.EventDispatcher とそのサブクラスの場合、次の動作をする。

  1. X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X_Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。この間に kill() が呼ばれても無視される。
  2. 破棄に進む場合は、X.Event.KILL_INSTANCE を発火する。
  3. dispatch 中は、インスタンスの全ての dispatch が終了するまで実際の破棄を待つ。
  4. 実際の破棄では、インスタンスのメンバの削除に加えて全てのイベントリスナを解除する。

Super(var_args) → {*}

関数は Constructor 内で使用します。クラス定義を辿ってスーパークラスのコンストラクタを呼び出します。
内部的には、呼び出したコンストラクタは配列に控え(X_Class_CALLING_SUPER)、呼び出したコンストラクタ内でさらに Super が呼ばれた場合、配列を元にさらにスーパーなコンストラクタを辿ります。

Parameters:
Name Type Argument Description
var_args ? repeatable  親コンストラクタを呼ぶ際に渡す任意の数の引数
Returns:
*
Example
 Constructor : function( arg1, arg2 ){
	this.Super( aeg1, arg2 );
}

superCall(myFunc, var_args) → {*}

myFunc について、スーパークラスで設定されている同名の関数を呼び出す。
低速な関数なので多用されるべきではありません!
第一引数に自身の(自身から参照できる)関数を指定します。内部では関数名を調べた上で prototype チェーンをゴリゴリ辿る、特別なことはしていません。
superCall と Super がネストする場合も現在のクラス階層を X_Class_SUPER_CALLER, X_Class_SUPER_STACKS を使って控えているので、意図した親関数が呼ばれます。
次の理由によって、関数名で辿ることは非推奨です。

  1. closur compiler でメソッド名が変更される
次の場合、意図した動作が得られません。
  1. 2つ以上の異なる名前で同じ関数がメンバーがいた場合
  2. サブクラスの prototype にスーパークラスと同じ関数をコピーしている
  3. 非関数でメンバーを上書きしている
  4. superCall 以外の手段で親関数を呼び、そのなかで superCall を呼んだ
通常の X.Class.create の書き方ではこのような状況は起きませんが、js はなんでもいろいろ出来てしまいますから…
参考:ES5なJavascriptでモダンなクラス的継承&スーパー呼び出し
original:Classical Inheritance in JavaScript

Parameters:
Name Type Argument Description
myFunc function | string オーバーライド済の自身の(自身から参照できる)関数。
var_args * repeatable  オーバーライド元関数に渡す任意の数の引数
Returns:
* オーバーライド元の関数を呼び出した戻り値。
Example
 return this.superCall( this.myFunc, param0, param1, ... );