X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2Fcore%2F04_XClass.js;h=040b39d5b74bc9199013e3d109514cc5e5efaa26;hb=4e5a06c9c610f8d3777f9d2eef71ec1365ffff1b;hp=5d219b337f12420cc0a42d94f9139b58e74d4751;hpb=05f275048f8b728ee0d741028d07a0a8ac3cd8c5;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/core/04_XClass.js b/0.6.x/js/core/04_XClass.js index 5d219b3..040b39d 100644 --- a/0.6.x/js/core/04_XClass.js +++ b/0.6.x/js/core/04_XClass.js @@ -17,7 +17,7 @@ X.Class = ( function(){ CONSTRUCTOR = 'Constructor', killPrivateFlag = false, traits = null, - _slice = Array.prototype.slice; + use__proto__ = !!X.emptyFunction.prototype.__proto__; /* サブクラスを作るメソッド * var subClass = superClass.inherits( ... ) @@ -63,9 +63,13 @@ X.Class = ( function(){ params.push( args[ 0 ] ); /* props サブクラスでは未定義でも可 */ // 継承クラスの作成 - Super.__new = null; - traits = new Super(); - Super.__new = C; + if( use__proto__ ){ + traits = Super.prototype; + } else { + Super.__new = null; + traits = new Super(); + Super.__new = C; + }; klass = X.Class.create.apply( X.Class, params ); traits = null; @@ -243,9 +247,16 @@ X.Class = ( function(){ klass.superClassOf = X.Class._superClassOf; klass.subClassOf = X.Class._subClassOf; - if( X.UA.Safari && X.UA.Safari < 3 ){ // TODO Gecko もこちらへ - X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false ); - if( traits ) klass.prototype.__proto__ = traits; + if( use__proto__ ){ + X.Class._override( klass.prototype, props, true ); + if( traits ){ + klass.prototype.__proto__ = traits; + } else { + X.Class._override( klass.prototype, CommonProps, false ); + }; + //if( X.UA.Safari && X.UA.Safari < 3 ){ // TODO Gecko もこちらへ + // X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false ); + // if( traits ) klass.prototype.__proto__ = traits; } else { klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false ); klass.prototype.constructor = klass;