OSDN Git Service

Version 0.6.159, fix X.Class & X.XHR.Gadget.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 11_XClass.js
index b7c2920..e4b556a 100644 (file)
@@ -5,7 +5,7 @@
 var\r
        /**\r
         * 全てのクラスのスーパークラスのようなもの。(ライブラリ内にカプセル化されているため、ユーザが触ることはありません)<br>\r
-        * X_Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
+        * X.Class.create() で定義されたクラスのインスタンスが共通で備えるメソッド を確認してください。\r
         * @class __ClassBase__\r
         * @private\r
         * @abstract\r
@@ -41,10 +41,7 @@ X_Class_CommonMethods =
         */\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
@@ -54,30 +51,33 @@ X_Class_CommonMethods =
                                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
@@ -307,7 +307,9 @@ X[ 'Class' ] = /** @lends X.Class */ {
                        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
@@ -334,12 +336,18 @@ X[ 'Class' ] = /** @lends X.Class */ {
                        // クラスメンバ用オブジェクトが無しでもクラスは作成可能\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
@@ -523,17 +531,15 @@ function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props
  */\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