- \r
- if( listeners && listeners[ X_LISTENERS_DISPATCHING ] ){\r
- listeners[ X_LISTENERS_KILL_RESERVED ] = true;\r
- return;\r
+\r
+ // SEAL のタイミングは、イベント中なので listeners が存在する\r
+ if( listeners && X_Class_SEAL_KILLING.length && X_Class_SEAL_KILLING.indexOf( this ) !== -1 ) return;\r
+\r
+ // 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
+ \r
+ if( this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ) & X_Callback_PREVENT_DEFAULT ){\r
+ this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE_CANCELED );\r
+ // BEFORE_KILL_INSTANCE, KILL_INSTANCE_CANCELED 内で kill() しても PREVENT_DEFAULT の場合はこれを無視する。\r
+ flag = true;\r
+ };\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
+\r
+ if( flag ) return;\r