var\r
/**\r
* 全てのクラスのスーパークラスのようなもの。(ライブラリ内にカプセル化されているため、ユーザが触ることはありません)<br>\r
- * X_Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
+ * X.Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
* @class __ClassBase__\r
* @private\r
* @abstract\r
*/\r
// TODO kill したインスタンスのイベントが残っていないか?これは開発用のみ\r
'kill' : function(){\r
- var instance = this,\r
- klass = X_Class_getClass( instance ),\r
- def = X_Class_getClassDef( klass ),\r
- data, p, i;\r
+ var def, listeners, p;\r
\r
// TODO kill 中の kill の呼び出しを防ぐ, 破棄済のインスタンスへの kill\r
\r
this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE_CANCELED );\r
return;\r
};\r
- if( this[ '_listeners' ] && this[ '_listeners' ][ X_LISTENERS_DISPATCHING ] ){\r
- this[ '_listeners' ][ X_LISTENERS_KILL_RESERVED ] = true;\r
+ \r
+ listeners = this[ '_listeners' ];\r
+ \r
+ if( listeners && listeners[ X_LISTENERS_DISPATCHING ] ){\r
+ listeners[ X_LISTENERS_KILL_RESERVED ] = true;\r
return;\r
};\r
\r
// asyncDispatch の削除\r
for( p in X_EventDispatcher_LAZY_TIMERS ){\r
if( X_EventDispatcher_LAZY_TIMERS[ p ] === this ){\r
- delete X_EventDispatcher_LAZY_TIMERS[ p ]; // 削除が先!理由は X.Timer.removeを確認。\r
- X_Timer_remove( parseFloat( p ) );\r
+ // delete X_EventDispatcher_LAZY_TIMERS[ p ]; コレ不要\r
+ X_Timer_remove( p );\r
};\r
};\r
\r
this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE );\r
- this[ '_listeners' ] && X_EventDispatcher_unlistenAll( this );\r
+ listeners && X_EventDispatcher_unlistenAll( this );\r
};\r
\r
- for( p in instance ){\r
- if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
- delete instance[ p ];\r
- };\r
+ X_Object_clear( this );\r
+ \r
+ def = X_Class_getClassDef( this );\r
+ \r
if( def.pool ){\r
- def.live && def.live.splice( def.live.indexOf( instance ), 1 );\r
- def.pool[ def.pool.length ] = instance;\r
+ def.live.splice( def.live.indexOf( this ), 1 );\r
+ def.pool[ def.pool.length ] = this;\r
};\r
},\r
\r
privateDef,\r
props,\r
klass,\r
- classDef = {}, hash;\r
+ classDef = {},\r
+ cbHash = { proxy : X_Class_actualConstructor, classDef : classDef };\r
+\r
if( X_Type_isString( displayName ) === true ){\r
classDef.displayName = displayName;\r
args.shift();\r
// クラスメンバ用オブジェクトが無しでもクラスは作成可能\r
props = {};\r
} else\r
- if( props[ 'Constructor' ] && X_Type_isFunction( props[ 'Constructor' ] ) ){\r
+ if( props[ 'Constructor' ] ){\r
+ //{+dev\r
+ if( !X_Type_isFunction( props[ 'Constructor' ] ) ){\r
+ alert( '"Constructor" is not function.' );\r
+ return;\r
+ };\r
+ //}+dev\r
classDef.Constructor = props[ 'Constructor' ];\r
};\r
\r
- klass = X_Callback_actualClosure( hash = { proxy : X_Class_actualConstructor } ); // TODO hash = classDef\r
- hash.klass = klass;\r
+ klass = X_Callback_actualClosure( cbHash ); // TODO callbackHash を class定義の置き場所にしてしまう!なるほど…\r
+ cbHash.klass = klass;\r
klass[ 'superClassOf' ] = X_Class_superClassOf;\r
klass[ 'subClassOf' ] = X_Class_subClassOf;\r
\r
*/\r
function X_Class_actualConstructor( f, args ){\r
var klass = f.klass,\r
- def = X_Class_getClassDef( klass ),\r
- dataUser = def._tempUser,\r
- instance, obj,\r
- userDef;\r
+ def = f.classDef,\r
+ instance, obj;\r
\r
if( def.Abstract ){\r
X.Logger.critical( 'AbstractClass!' );\r
return;\r
};\r
\r
- instance = def.pool && def.pool.length > 0 ?\r
+ instance = def.pool && def.pool.length ?\r
def.pool.pop() :\r
X_Class_useObjectCreate ?\r
Object.create( klass.prototype ) :\r