X_Class_useObjectCreate = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
X_Class_use_proto_ = !!X.emptyFunction.prototype.__proto__;\r
\r
+/* \r
+ * X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
+ */\r
+var X_Class_CommonProps = {\r
+ kill : function(){\r
+ var instance = this,\r
+ klass = X_Class_getClass( instance ),\r
+ def = X_Class_getClassDef( klass ),\r
+ data, p, i;\r
+ if( def.isPrivate && !X_Class_killPrivateFlag ){\r
+ X.Logger.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
+ return;\r
+ };\r
+ X_Class_killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
+ \r
+ // onKill() === false の場合、kill のキャンセル\r
+ // private は false での キャンセル は無視される\r
+ \r
+ if( this.instanceOf( X.EventDispatcher ) ){\r
+ //console.log( 'this.instanceOf( X.EventDispatcher )! ' + this._dispatching );\r
+ if( !def.isPrivate ){\r
+ if( this._dispatching ){\r
+ this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
+ this._killReserved = true;\r
+ this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+ return;\r
+ } else\r
+ if( this.dispatch( X.Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
+ this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+ return;\r
+ };\r
+ } else {\r
+ this.dispatch( X.Event.BEFORE_KILL_INSTANCE ); \r
+ };\r
+ this.dispatch( X.Event.KILL_INSTANCE );\r
+ this._listeners && X_EventDispatcher_systemUnlisten( this ); //.unlisten();\r
+ } else\r
+ if( X.Type.isFunction( instance.onKill ) && instance.onKill() === false && !def.isPrivate ){\r
+ return;\r
+ };\r
+ \r
+ for( p in instance ){\r
+ if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
+ delete instance[ p ];\r
+ };\r
+ if( def.pool ){\r
+ def.live && def.live.splice( def.live.indexOf( instance ), 1 );\r
+ def.pool[ def.pool.length ] = instance;\r
+ };\r
+ if( def.privateClass ){\r
+ i = def.userList.indexOf( instance );\r
+ if( i !== -1 ){\r
+ data = X_Class_getPrivate( instance );\r
+ X_Class_killPrivateFlag = true;\r
+ if( data._dispatching && data.instanceOf( X.EventDispatcher ) ){\r
+ data._killReserved = true;\r
+ } else {\r
+ data.kill();\r
+ };\r
+ def.dataList.splice( i, 1 );\r
+ def.userList.splice( i, 1 );\r
+ };\r
+ };\r
+ },\r
+ \r
+ // TODO Super\r
+ // superCall\r
+ \r
+ instanceOf : function( klass ){\r
+ var Super = this;\r
+ if( this.constructor === klass ) return true;\r
+ while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
+ if( Super === klass ) return true;\r
+ };\r
+ return false;\r
+ }\r
+};\r
// ------------------------------------------------------------------------- //\r
// --- interface ----------------------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
SINGLETON : 32, // 未実装\r
\r
create : function( /* displayName, classSetting, opt_PrivateClass, props */ ){\r
- var args = X.copyArray( arguments ),\r
+ var args = X_Object_cloneArray( arguments ),\r
displayName = args[ 0 ],\r
classSetting,\r
opt_pool, opt_abstract, opt_final, opt_private,\r
};\r
\r
function X_Class_newPrivate( /* instance, args */ ){\r
- var args = X.copyArray( arguments ),\r
+ var args = X_Object_cloneArray( arguments ),\r
user = args.shift(),\r
def = X_Class_getClassDef( user ),\r
privateClass = def.privateClass,\r
* http://d.hatena.ne.jp/m-hiyama/20051018/1129605002\r
*/\r
function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props */ ){\r
- var args = X.copyArray( arguments ),\r
+ var args = X_Object_cloneArray( arguments ),\r
params = [],\r
Super = this,\r
superDef = X_Class_getClassDef( Super ),\r
\r
return klass;\r
};\r
-\r
-/* X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
- *\r
- *\r
- */\r
-var X_Class_CommonProps = {\r
- kill : function(){\r
- var instance = this,\r
- klass = X_Class_getClass( instance ),\r
- def = X_Class_getClassDef( klass ),\r
- data, p, i;\r
- if( def.isPrivate && !X_Class_killPrivateFlag ){\r
- X.Logger.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
- return;\r
- };\r
- X_Class_killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
- \r
- // onKill() === false の場合、kill のキャンセル\r
- // private は false での キャンセル は無視される\r
- \r
- if( this.instanceOf( X.EventDispatcher ) ){\r
- console.log( 'this.instanceOf( X.EventDispatcher )! ' + this._dispatching );\r
- if( !def.isPrivate ){\r
- if( this._dispatching ){\r
- this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
- this._killReserved = true;\r
- this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
- return;\r
- } else\r
- if( this.dispatch( X.Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
- this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
- return;\r
- };\r
- } else {\r
- this.dispatch( X.Event.BEFORE_KILL_INSTANCE ); \r
- };\r
- console.log('kill ' + this._dispatching);\r
- this.dispatch( X.Event.KILL_INSTANCE );\r
- this._listeners && this.unlisten();\r
- } else\r
- if( X.Type.isFunction( instance.onKill ) && instance.onKill() === false && !def.isPrivate ){\r
- return;\r
- };\r
- \r
- for( p in instance ){\r
- if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
- delete instance[ p ];\r
- };\r
- if( def.pool ){\r
- def.live && def.live.splice( def.live.indexOf( instance ), 1 );\r
- def.pool[ def.pool.length ] = instance;\r
- };\r
- if( def.privateClass ){\r
- i = def.userList.indexOf( instance );\r
- if( i !== -1 ){\r
- data = X_Class_getPrivate( instance );\r
- X_Class_killPrivateFlag = true;\r
- if( data._dispatching && data.instanceOf( X.EventDispatcher ) ){\r
- data._killReserved = true;\r
- } else {\r
- data.kill();\r
- };\r
- def.dataList.splice( i, 1 );\r
- def.userList.splice( i, 1 );\r
- };\r
- };\r
- },\r
- \r
- // TODO Super\r
- // superCall\r
- \r
- instanceOf : function( klass ){\r
- var Super = this;\r
- if( this.constructor === klass ) return true;\r
- while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
- if( Super === klass ) return true;\r
- };\r
- return false;\r
- }\r
-};\r
\r
/*\r
* new の実体.コンストラクタの機能は instance.Constructor に書く.\r