* クラス名\r
* @type {string}\r
*/\r
- name : ''\r
+ NAME : ''\r
},\r
\r
X_Class_CLASS_LIST = [],\r
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
* 全ての動的メンバを削除して、インスタンスを破棄する。<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
// 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
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
// 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
*/ \r
'NONE' : X_Class.NONE,\r
\r
+ // TODO この指定、フレームワーク内だけ!\r
/**\r
* インスタンスは破棄時(this.kill())に回収され、次回の new MyClass() 時に再利用されます。\r
* @const\r
klass.prototype.constructor = klass;\r
};\r
\r
- klass[ 'name' ] = displayName;\r
+ klass[ 'NAME' ] = displayName;\r
\r
if( opt_abstract ){\r
classDef.isAbstract = true;\r
\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