X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F13_XClass.js;h=61749575a131da3789531ec0a6c1a18be8f91f72;hb=HEAD;hp=ee7174d69c09b25c612e6a3e824d58289614b6b4;hpb=7973f3ff61f1ef5bd9732f527b175010d0c0971b;p=pettanr%2FclientJs.git
diff --git a/0.6.x/js/01_core/13_XClass.js b/0.6.x/js/01_core/13_XClass.js
index ee7174d..6174957 100644
--- a/0.6.x/js/01_core/13_XClass.js
+++ b/0.6.x/js/01_core/13_XClass.js
@@ -15,17 +15,21 @@ var
* ã¯ã©ã¹å
* @type {string}
*/
- name : ''
+ NAME : ''
},
X_Class_CLASS_LIST = [],
X_Class_DEF_LIST = [],
- X_Class_CALLING_SUPER = [],
- X_Class_CALL_SUPER_STACK = [],
+ X_Class_SUPER_CALLER = [],
+ X_Class_SUPER_STACKS = [],
X_Class_traits = null,
X_Class_useObjectCreate = false, // !!Object.create, http://jsperf.com/prototype-vs-object-create-perf
// Opera Mobile 12.10 Android11 IS01 ã§ã¯ã©ã¹ã®ã¡ã³ããæ¬ è½ããåé¡ã«ééã__proto__ ãè¾ããã¨åä½,,,
- X_Class_use_proto_ = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] && !!X_emptyFunction.prototype.__proto__,
+ X_Class_use_proto_ = !X_UA[ 'OperaMobile' ] && !X_UA[ 'OperaTablet' ] &&
+ // Android ã§åå ä¸æã®ã¨ã©ã¼ã«ééãã¦ããã®ã¯ããã®è¾ºããæªãã... 2016.3.9
+ !X_UA[ 'AOSP' ] && !X_UA[ 'ChromeWV' ] &&
+ !!X_emptyFunction.prototype.__proto__,
+ X_Class_constructorFix = X_UA[ 'AOSP' ] < 3 || X_UA[ 'iOS' ] < 5,
X_Class_SEAL_KILLING = [],
X_Class_CommonMethods =
@@ -35,14 +39,14 @@ X_Class_CommonMethods =
* å
¨ã¦ã®åçã¡ã³ããåé¤ãã¦ãã¤ã³ã¹ã¿ã³ã¹ãç ´æ£ããã
* ã¤ã³ã¹ã¿ã³ã¹ã X.EventDispatcher ã¨ãã®ãµãã¯ã©ã¹ã®å ´åã次ã®åä½ãããã
*
- * - X.Event.BEFORE_KILL_INSTANCE ãçºç«ãããæ»ãå¤ã®ããããã©ã°ã« X_Callback.PREVENT_DEFAULT ãç«ã¤å ´åãç ´æ£ããã£ã³ã»ã«ã X.Event.KILL_INSTANCE_CANCELED ãçºç«ããããã®éã« kill() ãå¼ã°ãã¦ãç¡è¦ãããã
+ *
- X.Event.BEFORE_KILL_INSTANCE ãçºç«ãããæ»ãå¤ã®ããããã©ã°ã« X.Callback.PREVENT_DEFAULT ãç«ã¤å ´åãç ´æ£ããã£ã³ã»ã«ã X.Event.KILL_INSTANCE_CANCELED ãçºç«ããããã®éã« kill() ãå¼ã°ãã¦ãç¡è¦ãããã
*
- ç ´æ£ã«é²ãå ´åã¯ãX.Event.KILL_INSTANCE ãçºç«ããã
*
- dispatch ä¸ã¯ãã¤ã³ã¹ã¿ã³ã¹ã®å
¨ã¦ã® dispatch ãçµäºããã¾ã§å®éã®ç ´æ£ãå¾
ã¤ã
*
- å®éã®ç ´æ£ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã³ãã®åé¤ã«å ãã¦å
¨ã¦ã®ã¤ãã³ããªã¹ãã解é¤ããã
*/
// TODO kill ããã¤ã³ã¹ã¿ã³ã¹ã®ã¤ãã³ããæ®ã£ã¦ããªããï¼ããã¯éçºç¨ã®ã¿
'kill' : function(){
- var listeners, flag, p, timers, def;
+ var listeners, flag, p, i, list, timers, def;
// TODO ç ´æ£æ¸ã®ã¤ã³ã¹ã¿ã³ã¹ã¸ã® kill
@@ -56,9 +60,9 @@ X_Class_CommonMethods =
// listeners ããªãå ´åãã¤ãã³ãã®ç»é²ããªããããBEFORE_KILL_INSTANCE ã¯å¼ã°ããªãã
// KILL_RESERVEDã== trueãã®å ´åãBEFORE_KILL_INSTANCE ã¯å¼ã°ããªãã
if( listeners && !listeners[ X_LISTENERS_KILL_RESERVED ] && listeners[ X_EVENT_BEFORE_KILL_INSTANCE ] ){
- X_Class_SEAL_KILLING[ X_Class_SEAL_KILLING.length ] = this;
+ X_Class_SEAL_KILLING[ i = X_Class_SEAL_KILLING.length ] = this;
- if( this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ) & X_Callback_PREVENT_DEFAULT ){
+ if( this[ 'dispatch' ]( X_EVENT_BEFORE_KILL_INSTANCE ) & X_CALLBACK_PREVENT_DEFAULT ){
this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE_CANCELED );
// BEFORE_KILL_INSTANCE, KILL_INSTANCE_CANCELED å
㧠kill() ãã¦ã PREVENT_DEFAULT ã®å ´åã¯ãããç¡è¦ããã
flag = true;
@@ -66,7 +70,7 @@ X_Class_CommonMethods =
X_Class_SEAL_KILLING.length === 1 ?
( X_Class_SEAL_KILLING.length = 0 ) :
- X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING.indexOf( this ), 1 );
+ X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING[ i ] === this ? i : X_Class_SEAL_KILLING.indexOf( this ), 1 );
if( flag ) return;
};
@@ -78,21 +82,30 @@ X_Class_CommonMethods =
};
if( listeners[ X_EVENT_KILL_INSTANCE ] ){
- X_Class_SEAL_KILLING[ X_Class_SEAL_KILLING.length ] = this;
+ X_Class_SEAL_KILLING[ i = X_Class_SEAL_KILLING.length ] = this;
listeners[ X_LISTENERS_KILL_RESERVED ] = false;
this[ 'dispatch' ]( X_EVENT_KILL_INSTANCE );
X_Class_SEAL_KILLING.length === 1 ?
( X_Class_SEAL_KILLING.length = 0 ) :
- X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING.indexOf( this ), 1 );
+ X_Class_SEAL_KILLING.splice( X_Class_SEAL_KILLING[ i ] === this ? i : X_Class_SEAL_KILLING.indexOf( this ), 1 );
+ };
+
+ if( !( listeners = this[ '_listeners' ] ) ){
+ for( p in listeners ){
+ //if( X_EMPTY_OBJECT[ opt_type ] ) continue;
+ if( p <= X_LISTENERS_KILL_RESERVED ) continue;
+ list = listeners[ p ];
+ for( i = list.length; i; ){
+ this[ 'unlisten' ]( p, list[ --i ] );
+ };
+ };
};
-
- X_EventDispatcher_unlistenAll( this );
};
if( this[ 'instanceOf' ]( Node ) ){
- console.log( 'KILL : ' + this.call( 'outerHTML' ) );
+ // console.log( 'KILL : ' + this.call( 'outerHTML' ) );
X_Node_onKill( this );
};
@@ -118,7 +131,7 @@ X_Class_CommonMethods =
},
/**
- * é¢æ°ã¯ Constructor å
ã§ä½¿ç¨ãã¾ããã¯ã©ã¹å®ç¾©ã辿ã£ã¦ã¹ã¼ãã¼ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãæ¢ãã¾ãã
+ * é¢æ°ã¯ Constructor å
ã§ä½¿ç¨ãã¾ããã¯ã©ã¹å®ç¾©ã辿ã£ã¦ã¹ã¼ãã¼ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãå¼ã³åºãã¾ãã
* å
é¨çã«ã¯ãå¼ã³åºããã³ã³ã¹ãã©ã¯ã¿ã¯é
åã«æ§ã(X_Class_CALLING_SUPER)ãå¼ã³åºããã³ã³ã¹ãã©ã¯ã¿å
ã§ããã« Super ãå¼ã°ããå ´åãé
åãå
ã«ããã«ã¹ã¼ãã¼ãªã³ã³ã¹ãã©ã¯ã¿ã辿ãã¾ãã
* @example Constructor : function( arg1, arg2 ){
* this.Super( aeg1, arg2 );
@@ -128,95 +141,162 @@ X_Class_CommonMethods =
*/
// TODO ç¾å¨ new ãã¦ããã¤ã³ã¹ã¿ã³ã¹ãä¿æãã¦ãã§ãã¯ãã
'Super' : function( var_args ){
- var sClass = this,
- i = X_Class_CALLING_SUPER.indexOf( sClass ),
- n = -1,
- l, sList, def, sConst, ret;
+ var me = this,
+ sClass = me.constructor,
+ i = X_Class_SUPER_CALLER.indexOf( me ),
+ stack, t, def, ret;
if( i === -1 ){
- X_Class_CALLING_SUPER[ l = X_Class_CALLING_SUPER.length ] = sClass;
- X_Class_CALL_SUPER_STACK[ l ] = sList = [];
+ X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me;
+ t = stack = X_Class_SUPER_STACKS[ i ] = 0;
} else {
- sList = X_Class_CALL_SUPER_STACK[ i ];
+ t = stack = X_Class_SUPER_STACKS[ i ];
+
+ while( t ){
+ sClass = X_Class_getClassDef( sClass ).SuperClass;
+ --t;
+ };
};
-
+
while( sClass ){
+ ++t;
+ sClass = X_Class_getClassDef( sClass ).SuperClass;
+ if( !sClass ) break;
def = X_Class_getClassDef( sClass );
- sClass = def.SuperClass;
- sConst = def.SuperConstructor;
- if( sConst && sList[ ++n ] !== sConst ){
- sList[ n ] = sConst;
- ret = sConst.apply( this, arguments );
- --sList.length;
- if( !sList.length ){
- X_Class_CALLING_SUPER.splice( i, 1 );
- X_Class_CALL_SUPER_STACK.splice( i, 1 );
- };
- return ret;
+
+ if( def.Constructor ){
+ X_Class_SUPER_STACKS[ i ] += t;
+ ret = def.Constructor.apply( me, arguments );
+ break;
};
};
- console.log( 'ã¹ã¼ãã¼ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãè¦ã¤ããã¾ãã' );
+
+ // index ãæ¿ãã£ã¦ããå¯è½æ§ãããã®ã§åãç´ã
+ if( X_Class_SUPER_CALLER[ i ] !== me ) i = X_Class_SUPER_CALLER.indexOf( me );
+
+ if( X_Class_SUPER_STACKS[ i ] === stack ){
+ //console.log( 'ã¹ã¼ãã¼ã¯ã©ã¹ãã¾ãã¯ã¹ã¼ãã¼ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¯åå¨ãã¾ãã' );
+ };
+
+ if( stack === 0 ){
+ X_Class_SUPER_CALLER.splice( i, 1 );
+ X_Class_SUPER_STACKS.splice( i, 1 );
+ } else {
+ X_Class_SUPER_STACKS[ i ] = stack;
+ };
+ return ret || me;
},
/**
- * func ã«ã¤ãã¦ã親ã¯ã©ã¹ã§è¨å®ããã¦ããååã®é¢æ°ã¡ã³ãã¼ãå¼ã³åºãã
- * 第ä¸å¼æ°ã«é¢æ°ãæå®ãã2ã¤ä»¥ä¸ã®ç°ãªãååã§åãé¢æ°ãã¡ã³ãã¼ãããå ´åãåä½ãä¸ç¢ºå®ã«ãªãã¾ãã
- * åè:ES5ãªJavascriptã§ã¢ãã³ãªã¯ã©ã¹çç¶æ¿ï¼ã¹ã¼ãã¼å¼ã³åºã
- * @param funcNameOrFunc {Function|string} ã¹ã¼ãã¼ã¯ã©ã¹ã®é¢æ°å ã¾ãã¯ããªã¼ãã¼ã©ã¤ãæ¸ã®èªèº«ã®é¢æ°ã
+ * myFunc ã«ã¤ãã¦ãã¹ã¼ãã¼ã¯ã©ã¹ã§è¨å®ããã¦ããååã®é¢æ°ãå¼ã³åºãã
+ * ä½éãªé¢æ°ãªã®ã§å¤ç¨ãããã¹ãã§ã¯ããã¾ããï¼
+ * 第ä¸å¼æ°ã«èªèº«ã®(èªèº«ããåç
§ã§ãã)é¢æ°ãæå®ãã¾ããå
é¨ã§ã¯é¢æ°åã調ã¹ãä¸ã§ prototype ãã§ã¼ã³ãã´ãªã´ãªè¾¿ããç¹å¥ãªãã¨ã¯ãã¦ãã¾ããã
+ * superCall 㨠Super ããã¹ãããå ´åãç¾å¨ã®ã¯ã©ã¹é層ã X_Class_SUPER_CALLER, X_Class_SUPER_STACKS ã使ã£ã¦æ§ãã¦ããã®ã§ãæå³ãã親é¢æ°ãå¼ã°ãã¾ãã
+ * 次ã®çç±ã«ãã£ã¦ãé¢æ°åã§è¾¿ããã¨ã¯éæ¨å¥¨ã§ãã
+ *
+ * - closur compiler ã§ã¡ã½ããåãå¤æ´ããã
+ *
+ * 次ã®å ´åãæå³ããåä½ãå¾ããã¾ããã
+ *
+ * - 2ã¤ä»¥ä¸ã®ç°ãªãååã§åãé¢æ°ãã¡ã³ãã¼ãããå ´å
+ *
- ãµãã¯ã©ã¹ã® prototype ã«ã¹ã¼ãã¼ã¯ã©ã¹ã¨åãé¢æ°ãã³ãã¼ãã¦ãã
+ *
- éé¢æ°ã§ã¡ã³ãã¼ãä¸æ¸ããã¦ãã
+ *
- superCall 以å¤ã®æ段ã§è¦ªé¢æ°ãå¼ã³ããã®ãªã㧠superCall ãå¼ãã
+ *
+ * é常㮠X.Class.create ã®æ¸ãæ¹ã§ã¯ãã®ãããªç¶æ³ã¯èµ·ãã¾ããããjs ã¯ãªãã§ãããããåºæ¥ã¦ãã¾ãã¾ãããâ¦
+ * åè:ES5ãªJavascriptã§ã¢ãã³ãªã¯ã©ã¹çç¶æ¿ï¼ã¹ã¼ãã¼å¼ã³åºã
+ * original:Classical Inheritance in JavaScript
+ * @param myFunc {Function|string} ãªã¼ãã¼ã©ã¤ãæ¸ã®èªèº«ã®(èªèº«ããåç
§ã§ãã)é¢æ°ã
* @param var_args {...*} ãªã¼ãã¼ã©ã¤ãå
é¢æ°ã«æ¸¡ãä»»æã®æ°ã®å¼æ°
- * @example return this.superCall( arguments.callee, param0, param1, ... );
+ * @example return this.superCall( this.myFunc, param0, param1, ... );
* @return {*} ãªã¼ãã¼ã©ã¤ãå
ã®é¢æ°ãå¼ã³åºããæ»ãå¤ã
*/
- 'superCall' : function( funcNameOrFunc, var_args ){
- var sClass = this,
+ 'superCall' : function( myFunc, var_args ){
+ var me = this,
+ sClass = me.constructor,
+ proto = sClass.prototype,
+ i = X_Class_SUPER_CALLER.indexOf( me ),
args = arguments,
- name, p, sFunc, hit = false;
- if( X_Type_isFunction( funcNameOrFunc ) ){
- for( p in this.constructor.prototype ){
- if( this.constructor.prototype[ p ] === funcNameOrFunc ){
+ p, name, stack, t, sFunc, ret;
+
+ if( X_Type_isFunction( myFunc ) ){
+ for( p in proto ){
+ if( proto[ p ] === myFunc ){
name = p;
break;
};
};
if( !name ) return;
+ } else
+ if( X_Type_isString( myFunc ) && X_Type_isFunction( me[ myFunc ] ) ){
+ name = myFunc;
} else {
return;
};
-
- if( X_EMPTY_OBJECT[ name ] ) return;
-
- while( sClass ){
- def = X_Class_getClassDef( sClass );
- sClass = def.SuperClass;
- sFunc = sClass.prototype[ name ];
- if( sFunc === funcNameOrFunc ){
- hit = true; // ç¾å¨ã®é¢æ°ã«ããã
- } else
- if( hit && X_Object_inObject( name, this ) ){
- if( X_Type_isFunction( sFunc ) ){
- switch( args.length ){
- case 1 :
- return sFunc.call( this );
- case 2 :
- return sFunc.call( this, args[ 1 ] );
- case 3 :
- return sFunc.call( this, args[ 1 ], args[ 2 ] );
- case 4 :
- return sFunc.call( this, args[ 1 ], args[ 2 ], args[ 3 ] );
- default :
- args = X_Array_copy( args );
- args.shift();
- return sFunc.apply( this, args );
+
+ if( i === -1 ){
+ X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me;
+ t = stack = X_Class_SUPER_STACKS[ i ] = 0;
+ } else {
+ t = stack = X_Class_SUPER_STACKS[ i ];
+
+ while( t ){
+ sClass = X_Class_getClassDef( sClass ).SuperClass;
+ --t;
+ };
+ };
+
+ if( sClass ){
+ myFunc = sClass.prototype[ name ];
+
+ while( sClass ){
+ ++t;
+ sClass = X_Class_getClassDef( sClass ).SuperClass;
+ sFunc = sClass.prototype[ name ];
+
+ if( sFunc !== myFunc /* X_Object_own( name, sClass.prototype ) */ ){
+ if( X_Type_isFunction( sFunc ) ){
+ X_Class_SUPER_STACKS[ i ] += t;
+ switch( args.length ){
+ case 1 :
+ ret = sFunc.call( me );
+ break;
+ case 2 :
+ ret = sFunc.call( me, args[ 1 ] );
+ break;
+ case 3 :
+ ret = sFunc.call( me, args[ 1 ], args[ 2 ] );
+ break;
+ case 4 :
+ ret = sFunc.call( me, args[ 1 ], args[ 2 ], args[ 3 ] );
+ break;
+ default :
+ args = X_Array_copy( args );
+ args.shift();
+ ret = sFunc.apply( me, args );
+ break;
+ };
};
+ break;
};
- break;
};
};
+
+ // index ãæ¿ãã£ã¦ããå¯è½æ§ãããã®ã§åãç´ã
+ if( X_Class_SUPER_CALLER[ i ] !== me ) i = X_Class_SUPER_CALLER.indexOf( me );
+
+ if( stack === 0 ){
+ X_Class_SUPER_CALLER.splice( i, 1 );
+ X_Class_SUPER_STACKS.splice( i, 1 );
+ } else {
+ X_Class_SUPER_STACKS[ i ] = stack;
+ };
+ return ret;
},
/**
* ã¤ã³ã¹ã¿ã³ã¹ã®ã¯ã©ã¹ãï¼ã¾ãã¯ã¹ã¼ãã¼ã¯ã©ã¹ãï¼èª¿ã¹ãã
- * instanceof æ§æããµãã¼ãããªãç°å¢(IE4,Mac IE5)ãæ³å®ããå ´åãå¿
ããã®ã¡ã½ããã使ç¨ãããã¨ã
+ * instanceof æ§æããµãã¼ãããªãç°å¢(IE5以ä¸)ãæ³å®ããå ´åãå¿
ããã®ã¡ã½ããã使ç¨ãããã¨ã
* ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãï¼ã ã調ã¹ããå ´å㯠this.constructor === klass ãé«éã
* @param klass {__ClassBase__} ã¯ã©ã¹å®ç¾©
* @return {boolean}
@@ -224,6 +304,7 @@ X_Class_CommonMethods =
// TODO instanceof ã«å¯¾å¿ãããã©ã¦ã¶ã¯ãã¡ãã使ç¨
'instanceOf' : function( klass ){
var Super = this;
+
if( this.constructor === klass ) return true;
while( Super = X_Class_getClassDef( Super ).SuperClass ){
if( Super === klass ) return true;
@@ -276,6 +357,7 @@ X[ 'Class' ] = /** @lends X.Class */ {
*/
'NONE' : X_Class.NONE,
+ // TODO ãã®æå®ããã¬ã¼ã ã¯ã¼ã¯å
ã ãï¼
/**
* ã¤ã³ã¹ã¿ã³ã¹ã¯ç ´æ£æ(this.kill())ã«ååããã次åã® new MyClass() æã«åå©ç¨ããã¾ãã
* @const
@@ -382,7 +464,7 @@ X[ 'Class' ] = /** @lends X.Class */ {
classDef.Constructor = props[ 'Constructor' ];
};
- klass = X_Callback_actualClosure( cbHash ); // TODO callbackHash ã classå®ç¾©ã®ç½®ãå ´æã«ãã¦ãã¾ãï¼ãªãã»ã©â¦
+ klass = X_Closure_actualClosure( cbHash ); // TODO callbackHash ã classå®ç¾©ã®ç½®ãå ´æã«ãã¦ãã¾ãï¼ãªãã»ã©â¦
cbHash.klass = klass;
klass[ 'superClassOf' ] = X_Class_superClassOf;
klass[ 'subClassOf' ] = X_Class_subClassOf;
@@ -403,10 +485,10 @@ X[ 'Class' ] = /** @lends X.Class */ {
klass.prototype.constructor = klass;
};
- klass[ 'name' ] = displayName;
+ klass[ 'NAME' ] = displayName;
if( opt_abstract ){
- classDef.Abstract = true;
+ classDef.isAbstract = true;
} else
if( opt_pool ){
classDef.pool = [];
@@ -427,16 +509,13 @@ X[ 'Class' ] = /** @lends X.Class */ {
function X_Class_getClass( instance ){
- var cList = X_Class_CLASS_LIST,
- i = cList.length,
- klass;
- for( ; i; ){
- klass = cList[ --i ];
- if( instance.constructor === klass ) return klass;
- };
+ var cList = X_Class_CLASS_LIST, i;
+
+ if( ( i = cList.indexOf( instance.constructor ) ) !== -1 ) return cList[ i ];
if( cList.indexOf( instance ) !== -1 ) return instance;
};
+// TODO def = klass( X_Closure_COMMAND_BACK )
function X_Class_getClassDef( KlassOrInstance ){
var i = X_Class_CLASS_LIST.indexOf( KlassOrInstance );
if( i === -1 ) i = X_Class_CLASS_LIST.indexOf( X_Class_getClass( KlassOrInstance ) );
@@ -498,11 +577,10 @@ function X_Class_subClassOf( klass ){
* @example var SubClass = SuperClass.inherits( 'Sub', X_Class.FINAL, { ... } );
* @param {string} [displayName] ã¯ã©ã¹ã®åå
* @param {number} [classSetting=0] X_Class.POOL_OBJECT | X_Class.FINAL ãªã©
- * @param {__ClassBase__=} [privateClass] ãã®ã¯ã©ã¹ã¨ãã¢ã§åä½ããã·ã£ãã¦ã¯ã©ã¹
* @param {object} [props={}] ãã®ã¯ã©ã¹ã®ã¡ã³ãã¨é¢æ°ãã³ã³ã¹ãã©ã¯ã¿ã¯ Constructor ã¨æ¸ããã¨
* @return {__ClassBase__}
*/
-function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props */ ){
+function X_Class_inherits( /* displayName, classSetting, props */ ){
var args = X_Array_copy( arguments ),
params = [],
Super = this,
@@ -555,8 +633,8 @@ function X_Class_inherits( /* displayName, classSetting, opt_PrivateClass, props
def = X_Class_getClassDef( klass );
// ç¶æ¿ç¨ããããã£ãæ§ãã
def.SuperClass = Super;
- def.SuperProto = Super.prototype;
- def.SuperConstructor = superDef.Constructor || superDef.SuperConstructor;
+ //def.SuperProto = Super.prototype;
+ //def.SuperConstructor = superDef.Constructor || superDef.SuperConstructor;
return klass;
};
@@ -570,7 +648,7 @@ function X_Class_actualConstructor( f, args ){
def = f.classDef,
instance, obj;
- if( def.Abstract ){
+ if( def.isAbstract ){
X.Logger.critical( 'AbstractClass!' );
return;
};
@@ -580,18 +658,23 @@ function X_Class_actualConstructor( f, args ){
X_Class_useObjectCreate ?
Object.create( klass.prototype ) :
new klass( X_Closure_COMMAND_DROP );
-
+
def.live && def.live.push( instance );
+ if( X_Class_constructorFix && instance.constructor !== klass ){
+ console.log( '------- constructor ã®ä¸ä¸è´!' ); // Android2.3.7
+ instance.constructor = klass;
+ };
+
obj = def.Constructor ?
def.Constructor.apply( instance, args ) :
- def.SuperConstructor &&
- def.SuperConstructor.apply( instance, args );
+ def.SuperClass && instance[ 'Super' ].apply( instance, args );
if( obj !== instance && ( X_Type_isObject( obj ) || X_Type_isFunction( obj ) ) ){ // Class
instance[ 'kill' ]();
return obj;
};
+
return instance;
};