X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F13_XClass.js;h=61749575a131da3789531ec0a6c1a18be8f91f72;hb=604668ba9efa027d4bc77fd8020d6b6be55d03e1;hp=de840072b3c90c1531b8d702bad8c0cdac83df47;hpb=fef2e81d242a7ebd86dcb1089338303ef28659d5;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 de84007..6174957 100644 --- a/0.6.x/js/01_core/13_XClass.js +++ b/0.6.x/js/01_core/13_XClass.js @@ -15,7 +15,7 @@ var * クラス名 * @type {string} */ - name : '' + NAME : '' }, X_Class_CLASS_LIST = [], @@ -25,7 +25,10 @@ var 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 = [], @@ -36,7 +39,7 @@ X_Class_CommonMethods = * 全ての動的メンバを削除して、インスタンスを破棄する。
* インスタンスが X.EventDispatcher とそのサブクラスの場合、次の動作をする。 *
    - *
  1. X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X_Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。この間に kill() が呼ばれても無視される。 + *
  2. X.Event.BEFORE_KILL_INSTANCE を発火する。戻り値のビットフラグに X.Callback.PREVENT_DEFAULT が立つ場合、破棄をキャンセルし X.Event.KILL_INSTANCE_CANCELED を発火する。この間に kill() が呼ばれても無視される。 *
  3. 破棄に進む場合は、X.Event.KILL_INSTANCE を発火する。 *
  4. dispatch 中は、インスタンスの全ての dispatch が終了するまで実際の破棄を待つ。 *
  5. 実際の破棄では、インスタンスのメンバの削除に加えて全てのイベントリスナを解除する。 @@ -214,7 +217,7 @@ X_Class_CommonMethods = proto = sClass.prototype, i = X_Class_SUPER_CALLER.indexOf( me ), args = arguments, - p, name, t, sFunc, ret; + p, name, stack, t, sFunc, ret; if( X_Type_isFunction( myFunc ) ){ for( p in proto ){ @@ -301,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; @@ -481,7 +485,7 @@ X[ 'Class' ] = /** @lends X.Class */ { klass.prototype.constructor = klass; }; - klass[ 'name' ] = displayName; + klass[ 'NAME' ] = displayName; if( opt_abstract ){ classDef.isAbstract = true;