OSDN Git Service

Fix the bug of X.NodeAnime.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 13_XClass.js
index f0dc784..6174957 100644 (file)
@@ -15,7 +15,7 @@ var
                         * クラス名\r
                         * @type {string}\r
                         */\r
-                       name         : ''\r
+                       NAME         : ''\r
                },\r
 \r
        X_Class_CLASS_LIST         = [],\r
@@ -25,7 +25,10 @@ var
        X_Class_traits             = null,\r
        X_Class_useObjectCreate    = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
        // Opera Mobile 12.10 Android11 IS01 でクラスのメンバが欠落する問題に遭遇。__proto__ を辞めると動作,,,\r
-       X_Class_use_proto_         = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] && !!X_emptyFunction.prototype.__proto__,\r
+       X_Class_use_proto_         = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] &&\r
+                                                               // Android で原因不明のエラーに遭遇しているのは、この辺りが怪しい... 2016.3.9\r
+                                                                !X_UA[ 'AOSP' ] && !X_UA[ 'ChromeWV' ] &&\r
+                                                                       !!X_emptyFunction.prototype.__proto__,\r
        X_Class_constructorFix     = X_UA[ 'AOSP' ] < 3 || X_UA[ 'iOS' ] < 5,\r
        X_Class_SEAL_KILLING       = [],\r
 \r
@@ -36,7 +39,7 @@ X_Class_CommonMethods =
         * 全ての動的メンバを削除して、インスタンスを破棄する。<br>\r
         * インスタンスが X.EventDispatcher とそのサブクラスの場合、次の動作をする。\r
         * <ol>\r
-        * <li>X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X_Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。この間に kill() が呼ばれても無視される。\r
+        * <li>X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X.Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。この間に kill() が呼ばれても無視される。\r
         * <li>破棄に進む場合は、X.Event.KILL_INSTANCE を発火する。\r
         * <li>dispatch 中は、インスタンスの全ての dispatch が終了するまで実際の破棄を待つ。\r
         * <li>実際の破棄では、インスタンスのメンバの削除に加えて全てのイベントリスナを解除する。\r
@@ -171,7 +174,9 @@ X_Class_CommonMethods =
                // 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
+               if( X_Class_SUPER_STACKS[ i ] === stack ){\r
+                       //console.log( 'スーパークラス、またはスーパークラスのコンストラクタは存在しません' );\r
+               };\r
                \r
                if( stack === 0 ){\r
                        X_Class_SUPER_CALLER.splice( i, 1 );\r
@@ -212,7 +217,7 @@ X_Class_CommonMethods =
                        proto  = sClass.prototype,\r
                        i      = X_Class_SUPER_CALLER.indexOf( me ),\r
                        args   = arguments,\r
-                       p, name, t, sFunc, ret;\r
+                       p, name, stack, t, sFunc, ret;\r
 \r
                if( X_Type_isFunction( myFunc ) ){\r
                        for( p in proto ){\r
@@ -299,6 +304,7 @@ X_Class_CommonMethods =
        // TODO instanceof に対応したブラウザはそちらを使用\r
        'instanceOf' : function( klass ){\r
                var Super = this;\r
+\r
                if( this.constructor === klass ) return true;\r
                while( Super = X_Class_getClassDef( Super ).SuperClass ){\r
                        if( Super === klass ) return true;\r
@@ -479,7 +485,7 @@ X[ 'Class' ] = /** @lends X.Class */ {
                        klass.prototype.constructor = klass;\r
                };\r
                \r
-               klass[ 'name' ] = displayName;\r
+               klass[ 'NAME' ] = displayName;\r
                \r
                if( opt_abstract ){\r
                        classDef.isAbstract = true;\r
@@ -662,7 +668,7 @@ function X_Class_actualConstructor( f, args ){
 \r
        obj = def.Constructor ?\r
                        def.Constructor.apply( instance, args ) :\r
-                       instance[ 'Super' ].apply( instance, args );\r
+                       def.SuperClass && instance[ 'Super' ].apply( instance, args );\r
 \r
        if( obj !== instance && ( X_Type_isObject( obj ) || X_Type_isFunction( obj ) ) ){ // Class\r
                instance[ 'kill' ]();\r