OSDN Git Service

Version 0.6.107, cleanup X.NodeCSS, fix X.Node.Event for touch, add unescape for...
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 11_XClass.js
index 1bf0697..5222ea8 100644 (file)
@@ -2,7 +2,7 @@
  * Class を定義し システムの管理下に置く.\r
  * 全てのクラスと pool が有効の場合インスタンスへの参照が保持される.\r
  *  1. X.Class.create( opt_settings, opt_name, opt_privateClass, opt_props ) でクラスを登録.\r
- *  2. コンストラクタ となるメソッドは、Constructor : function( arg ){ ... }, に書く.\r
+ *  2. コンストラクタ となるメソッドは、opt_props 内の Constructor : function( arg ){ ... }, に書く.\r
  *  3. 通常通り new で インスタンス生成\r
  *  4. kill() でオブジェクトをクリーンして削除、pool が有効の場合は pool される.\r
  *  5. pool が有効の場合、new で pool されたインスタンスが返される.\r
@@ -22,12 +22,19 @@ var X_Class_CLASS_LIST         = [],
        X_Class_killPrivateFlag    = false,\r
        X_Class_traits             = null,\r
        X_Class_useObjectCreate    = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf\r
-       X_Class_use_proto_         = !!X.emptyFunction.prototype.__proto__;\r
+       X_Class_use_proto_         = !!X.emptyFunction.prototype.__proto__,\r
 \r
-/* \r
- * X.Class.create で作られたクラスのインスタンスが共通で備えるメソッド \r
- */\r
-var X_Class_CommonProps = {\r
+/** \r
+ * X.Class.create で定義されたクラスのインスタンスが共通で備えるメソッド を格納\r
+ *\r
+ * @class\r
+ */ \r
+X_Class_CommonProps =\r
+\r
+{\r
+       /*\r
+        * インスタンスの破棄。\r
+        */\r
        kill : function(){\r
                var instance = this,\r
                        klass    = X_Class_getClass( instance ),\r
@@ -104,14 +111,27 @@ var X_Class_CommonProps = {
 // ------------------------------------------------------------------------- //\r
 // --- interface ----------------------------------------------------------- //\r
 // ------------------------------------------------------------------------- //\r
+\r
+/** @namespace */ \r
 X.Class = {\r
-       \r
+    /**\r
+     * インスタンスは破棄時(this.kill())に回収され、次回の new MyClass() 時に再利用されます。\r
+     * @memberof X.Class */\r
        POOL_OBJECT  :  1,\r
+       \r
+       /**\r
+        * 定義するクラスは抽象クラスになります。new AbstractClass() とするとエラーになります。\r
+        * @memberof X.Class */\r
        ABSTRACT     :  2,\r
+       \r
+       \r
+       /** @memberof X.Class */\r
        FINAL        :  4,\r
+       /** @memberof X.Class */\r
        SUPER_ACCESS :  8,\r
+       /** @memberof X.Class */\r
        PRIVATE_DATA : 16,\r
-       \r
+       /** @memberof X.Class */\r
        SINGLETON    : 32, // 未実装\r
        \r
        create : function( /* displayName, classSetting, opt_PrivateClass, props */ ){\r
@@ -122,7 +142,7 @@ X.Class = {
                        privateDef,\r
                        props,\r
                        klass,\r
-                       classDef = {};\r
+                       classDef = {}, hash;\r
                if( X.Type.isString( displayName ) === true ){\r
                        classDef.displayName = displayName;\r
                        args.shift();\r
@@ -173,9 +193,8 @@ X.Class = {
                        classDef.Constructor = props.Constructor;\r
                };\r
 \r
-               // TODO use X.Function\r
-               klass = new Function( 'var a=arguments,f=a.callee;if(f.__new)return f.__new(a)' );\r
-               klass.__new = X_Class_actualConstructor;\r
+               klass  = X_Callback_actualClosure( hash = { _ : X_Class_actualConstructor } ); // TODO hash = classDef\r
+               hash.c = klass;\r
                klass.superClassOf = X_Class_superClassOf;\r
                klass.subClassOf   = X_Class_subClassOf;\r
                \r
@@ -196,19 +215,19 @@ X.Class = {
                };\r
                klass.name = displayName;\r
                \r
-               if( opt_abstract === true ){\r
+               if( opt_abstract ){\r
                        classDef.Abstract = true;\r
                } else\r
-               if( opt_pool === true ){\r
+               if( opt_pool ){\r
                        classDef.pool = [];\r
                        if( opt_private === false ) classDef.live = [];\r
                };                      \r
-               if( opt_final === true ){\r
+               if( opt_final ){\r
                        classDef.Final = true;\r
                } else {\r
                        klass.inherits = X_Class_inherits;\r
                };                      \r
-               if( opt_private === true ){\r
+               if( opt_private ){\r
                        if( classDef.privateClass ){\r
                                X.Logger.critical( 'Private Data Class has no PrivateClass!' );\r
                                return;\r
@@ -223,15 +242,9 @@ X.Class = {
                return klass;\r
        },\r
        \r
-       _getClass    : X_Class_getClass,\r
-       \r
-       _getClassDef : X_Class_getClassDef,\r
-       \r
        _newPrivate  : X_Class_newPrivate,\r
        \r
-       _getPrivate  : X_Class_getPrivate,\r
-       \r
-       _override    : X_Class_override\r
+       _getPrivate  : X_Class_getPrivate\r
        \r
 };\r
 \r
@@ -292,7 +305,7 @@ function X_Class_newPrivate( /* instance, args */ ){
                return;\r
        };\r
        privateDef._tempUser = user;\r
-       return privateClass.__new( args );\r
+       return X_Class_actualConstructor( privateClass( X_Closure_COMMAND_BACK ), args );// privateClass.__new( args );\r
 };\r
 \r
 function X_Class_getPrivate( instance ){\r
@@ -385,9 +398,9 @@ function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props
        if( X_Class_use_proto_ ){\r
                X_Class_traits = Super.prototype;\r
        } else {\r
-               Super.__new = null;\r
-               X_Class_traits = new Super();\r
-               Super.__new = X_Class_actualConstructor;                        \r
+               //Super.__new = null;\r
+               X_Class_traits = new Super( X_Closure_COMMAND_DROP );\r
+               //Super.__new = X_Class_actualConstructor;                      \r
        };\r
        klass  = X.Class.create.apply( X.Class, params );\r
        X_Class_traits = null;\r
@@ -410,8 +423,8 @@ function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props
  * new の実体.コンストラクタの機能は instance.Constructor に書く.\r
  * これにより pool された オブジェクト(破棄されたインスタンス) を再利用できる\r
  */\r
-function X_Class_actualConstructor( args ){\r
-       var klass    = this,\r
+function X_Class_actualConstructor( obj, args ){\r
+       var klass    = obj.c,//this,\r
                def      = X_Class_getClassDef( klass ),\r
                dataUser = def._tempUser,\r
                instance, obj,\r
@@ -424,13 +437,13 @@ function X_Class_actualConstructor( args ){
                X.Logger.critical( 'use myClass.newPrivate( instance, ...args )!' );\r
                return;\r
        };\r
-       klass.__new = null;\r
+       //klass.__new = null;\r
        instance = def.pool && def.pool.length > 0 ?\r
                                        def.pool.pop() :\r
                                X_Class_useObjectCreate ?\r
                                        Object.create( klass.prototype ) :\r
-                                       new klass();\r
-       klass.__new = X_Class_actualConstructor;\r
+                                       new klass( X_Closure_COMMAND_DROP );\r
+       //klass.__new = X_Class_actualConstructor;\r
        \r
        if( def.isPrivate ){\r
                userDef = X_Class_getClassDef( dataUser );\r