OSDN Git Service

Version 0.6.76, changed _rawNode to _rawObject.
[pettanr/clientJs.git] / 0.6.x / js / 00_core / 04_XClass.js
index f4497b0..2de9d36 100644 (file)
@@ -17,8 +17,9 @@ X.Class = ( function(){
                CONSTRUCTOR        = 'Constructor',\r
                killPrivateFlag    = false,\r
                traits             = null,\r
+               useObjectCreate    = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
                use__proto__       = !!X.emptyFunction.prototype.__proto__;\r
-       \r
+       _DEF_LIST = DEF_LIST;\r
        /* サブクラスを作るメソッド  \r
         * var subClass = superClass.inherits( ... ) \r
         * http://d.hatena.ne.jp/m-hiyama/20051018/1129605002\r
@@ -47,7 +48,8 @@ X.Class = ( function(){
                if( X.Type.isNumber( classSetting ) ){\r
                        args.shift();\r
                } else {\r
-                       classSetting = superDef.setting;\r
+                       // クラス設定がない場合、親からコピーして、Abstract flag は落とす??\r
+                       classSetting = superDef.setting;// &= ~X.Class.ABSTRACT;\r
                };\r
                if( superDef.isPrivate ) classSetting = classSetting | X.Class.PRIVATE_DATA;\r
                opt_super = !!( classSetting & X.Class.SUPER_ACCESS );\r
@@ -63,6 +65,9 @@ X.Class = ( function(){
                params.push( args[ 0 ] ); /* props サブクラスでは未定義でも可 */\r
                \r
                // 継承クラスの作成\r
+               if( useObjectCreate ){\r
+                       traits = Object.create( Super.prototype );\r
+               } else\r
                if( use__proto__ ){\r
                        traits = Super.prototype;\r
                } else {\r
@@ -84,7 +89,10 @@ X.Class = ( function(){
                return klass;\r
        };\r
        \r
-       /* X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド */\r
+       /* X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
+        *\r
+        *\r
+        */\r
        var CommonProps = {\r
                kill : function(){\r
                        var instance = this,\r
@@ -155,7 +163,11 @@ X.Class = ( function(){
                        return;\r
                };\r
                klass.__new = null;\r
-               instance = def.pool && def.pool.length > 0 ? def.pool.pop() : new klass();\r
+               instance = def.pool && def.pool.length > 0 ?\r
+                                               def.pool.pop() :\r
+                                       useObjectCreate ?\r
+                                               Object.create( klass.prototype ) :\r
+                                               new klass();\r
                klass.__new = C;\r
                if( def.isPrivate === true ){\r
                        userDef = X.Class._getClassDef( dataUser );\r
@@ -175,7 +187,7 @@ X.Class = ( function(){
                                def[ CONSTRUCTOR ].apply( instance, args ) :\r
                        def.SuperConstructor &&\r
                                def.SuperConstructor.apply( instance, args );\r
-               if( X.Type.isObject( obj ) ){\r
+               if( X.Type.isObject( obj ) && obj !== instance ){\r
                        instance.kill();\r
                        return obj;\r
                };\r
@@ -257,6 +269,10 @@ X.Class = ( function(){
                        klass.superClassOf = X.Class._superClassOf;\r
                        klass.subClassOf   = X.Class._subClassOf;\r
                        \r
+                       if( useObjectCreate ){\r
+                               klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
+                               klass.prototype.constructor = klass;\r
+                       } else\r
                        if( use__proto__ ){\r
                                X.Class._override( klass.prototype, props, true );\r
                                if( traits ){\r