OSDN Git Service

Version 0.6.96. add lock function @X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 11_XClass.js
index db37581..1bf0697 100644 (file)
@@ -24,6 +24,83 @@ var X_Class_CLASS_LIST         = [],
        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
@@ -38,7 +115,7 @@ X.Class = {
        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
@@ -194,7 +271,7 @@ function X_Class_getClassDef( KlassOrInstance ){
 };\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
@@ -262,7 +339,7 @@ function X_Class_subClassOf( klass ){
  * 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
@@ -328,86 +405,6 @@ function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props
        \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