OSDN Git Service

Version 0.6.195, add opacity-fix for IE8.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 13_XClass.js
index 343f862..9f6b05a 100644 (file)
@@ -43,7 +43,7 @@ X_Class_CommonMethods =
         */\r
        // TODO kill したインスタンスのイベントが残っていないか?これは開発用のみ\r
        'kill' : function(){\r
-               var listeners, flag, p, timers, def;\r
+               var listeners, flag, p, i, list, timers, def;\r
                \r
                // TODO 破棄済のインスタンスへの kill\r
                \r
@@ -57,7 +57,7 @@ X_Class_CommonMethods =
                        // listeners がない場合、イベントの登録がないため、BEFORE_KILL_INSTANCE は呼ばれない。\r
                        // KILL_RESERVED == true の場合、BEFORE_KILL_INSTANCE は呼ばれない。\r
                        if( listeners && !listeners[ X_LISTENERS_KILL_RESERVED ] && listeners[ X_EVENT_BEFORE_KILL_INSTANCE ] ){\r
-                               X_Class_SEAL_KILLING[ X_Class_SEAL_KILLING.length ] = this;\r
+                               X_Class_SEAL_KILLING[ i = X_Class_SEAL_KILLING.length ] = this;\r
                                \r
                                if( this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ) & X_CALLBACK_PREVENT_DEFAULT ){\r
                                        this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE_CANCELED );\r
@@ -67,7 +67,7 @@ X_Class_CommonMethods =
                                \r
                                X_Class_SEAL_KILLING.length === 1 ?\r
                                        ( X_Class_SEAL_KILLING.length = 0 ) :\r
-                                       X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING.indexOf( this ), 1 );\r
+                                       X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING[ i ] === this ? i : X_Class_SEAL_KILLING.indexOf( this ), 1 );\r
 \r
                                if( flag ) return;\r
                        };\r
@@ -79,17 +79,26 @@ X_Class_CommonMethods =
                                };\r
                                \r
                                if( listeners[ X_EVENT_KILL_INSTANCE ] ){\r
-                                       X_Class_SEAL_KILLING[ X_Class_SEAL_KILLING.length ] = this;\r
+                                       X_Class_SEAL_KILLING[ i = X_Class_SEAL_KILLING.length ] = this;\r
 \r
                                        listeners[ X_LISTENERS_KILL_RESERVED ] = false;                                 \r
                                        this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE );\r
                                        \r
                                        X_Class_SEAL_KILLING.length === 1 ?\r
                                                ( X_Class_SEAL_KILLING.length = 0 ) :\r
-                                               X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING.indexOf( this ), 1 );\r
+                                               X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING[ i ] === this ? i : X_Class_SEAL_KILLING.indexOf( this ), 1 );\r
+                               };\r
+\r
+                               if( !( listeners = this[ '_listeners' ] ) ){\r
+                                       for( p in listeners ){\r
+                                               //if( X_EMPTY_OBJECT[ opt_type ] ) continue;\r
+                                               if( p <= X_LISTENERS_KILL_RESERVED ) continue;\r
+                                               list = listeners[ p ];\r
+                                               for( i = list.length; i; ){\r
+                                                       this[ 'unlisten' ]( p, list[ --i ] );\r
+                                               };\r
+                                       };                                      \r
                                };\r
-                               \r
-                               X_EventDispatcher_unlistenAll( this );\r
                        };\r
 \r
                        if( this[ 'instanceOf' ]( Node ) ){\r
@@ -159,6 +168,9 @@ X_Class_CommonMethods =
                        };\r
                };\r
                \r
+               // index が替わっている可能性があるので取り直し\r
+               if( X_Class_SUPER_CALLER[ i ] !== me ) i = X_Class_SUPER_CALLER.indexOf( me );\r
+               \r
                if( X_Class_SUPER_STACKS[ i ] === stack ) console.log( 'スーパークラス、またはスーパークラスのコンストラクタは存在しません' );\r
                \r
                if( stack === 0 ){\r
@@ -238,21 +250,20 @@ X_Class_CommonMethods =
                                sFunc  = sClass.prototype[ name ];\r
                                \r
                                if( sFunc !== myFunc /* X_Object_own( name, sClass.prototype ) */ ){\r
-                                       // this の関数と異なり、値が設定されていたら、今は手を抜いて undef か?見ている、正しくは hasOwnProperty\r
                                        if( X_Type_isFunction( sFunc ) ){\r
                                                X_Class_SUPER_STACKS[ i ] += t;\r
                                                switch( args.length ){\r
-                                                       case 0 :\r
-                                                               ret = sFunc.call( me );\r
-                                                               break;\r
                                                        case 1 :\r
-                                                               ret = sFunc.call( me, args[ 0 ] );\r
+                                                               ret = sFunc.call( me );\r
                                                                break;\r
                                                        case 2 :\r
-                                                               ret = sFunc.call( me, args[ 0 ], args[ 1 ] );\r
+                                                               ret = sFunc.call( me, args[ 1 ] );\r
                                                                break;\r
                                                        case 3 :\r
-                                                               ret = sFunc.call( me, args[ 0 ], args[ 1 ], args[ 2 ] );\r
+                                                               ret = sFunc.call( me, args[ 1 ], args[ 2 ] );\r
+                                                               break;\r
+                                                       case 4 :\r
+                                                               ret = sFunc.call( me, args[ 1 ], args[ 2 ], args[ 3 ] );\r
                                                                break;\r
                                                        default :\r
                                                                args = X_Array_copy( args );\r
@@ -266,6 +277,9 @@ X_Class_CommonMethods =
                        };\r
                };\r
 \r
+               // index が替わっている可能性があるので取り直し\r
+               if( X_Class_SUPER_CALLER[ i ] !== me ) i = X_Class_SUPER_CALLER.indexOf( me );\r
+\r
                if( stack === 0 ){\r
                        X_Class_SUPER_CALLER.splice( i, 1 );\r
                        X_Class_SUPER_STACKS.splice( i, 1 );\r