OSDN Git Service
(root)
/
pettanr
/
clientJs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 0.6.35, bugfix.
[pettanr/clientJs.git]
/
0.6.x
/
js
/
core
/
04_XClass.js
diff --git
a/0.6.x/js/core/04_XClass.js
b/0.6.x/js/core/04_XClass.js
index
ac2c1a6
..
9fc4fd3
100644
(file)
--- a/
0.6.x/js/core/04_XClass.js
+++ b/
0.6.x/js/core/04_XClass.js
@@
-18,22
+18,13
@@
X.Class = ( function(){
killPrivateFlag = false,
\r
traits = null,
\r
_slice = Array.prototype.slice;
\r
killPrivateFlag = false,
\r
traits = null,
\r
_slice = Array.prototype.slice;
\r
-
\r
- function copyArray( list ){
\r
- //return _slice.call( list, 0 );
\r
- var i = list.length, ret = [];
\r
- for( ; i; ){
\r
- ret[ --i ] = list[ i ];
\r
- };
\r
- return ret;
\r
- };
\r
\r
/* サブクラスを作るメソッド
\r
* var subClass = superClass.inherits( ... )
\r
* http://d.hatena.ne.jp/m-hiyama/20051018/1129605002
\r
*/
\r
function inherits( /* displayName, classSetting, opt_PrivateClass, props */ ){
\r
\r
/* サブクラスを作るメソッド
\r
* var subClass = superClass.inherits( ... )
\r
* http://d.hatena.ne.jp/m-hiyama/20051018/1129605002
\r
*/
\r
function inherits( /* displayName, classSetting, opt_PrivateClass, props */ ){
\r
- var args = copyArray( arguments ),
\r
+ var args =
X.
copyArray( arguments ),
\r
params = [],
\r
Super = this,
\r
superDef = X.Class._getClassDef( Super ),
\r
params = [],
\r
Super = this,
\r
superDef = X.Class._getClassDef( Super ),
\r
@@
-41,40
+32,51
@@
X.Class = ( function(){
classSetting,
\r
opt_super,
\r
klass, def;
\r
classSetting,
\r
opt_super,
\r
klass, def;
\r
- if( superDef.Final
=== true
) X.Notification.critical( 'X.Class inherits, Class is final!' );
\r
+ if( superDef.Final ) X.Notification.critical( 'X.Class inherits, Class is final!' );
\r
\r
\r
- if( X.Type.isString( displayName ) === true ){
\r
+ // サブクラス名
\r
+ if( X.Type.isString( displayName ) ){
\r
args.shift();
\r
} else {
\r
displayName = 'SubClass of ' + superDef.displayName;
\r
};
\r
params.push( displayName );
\r
\r
args.shift();
\r
} else {
\r
displayName = 'SubClass of ' + superDef.displayName;
\r
};
\r
params.push( displayName );
\r
\r
+ // サブクラス設定
\r
classSetting = args[ 0 ];
\r
classSetting = args[ 0 ];
\r
- if( X.Type.isNumber( classSetting ) === true ){
\r
- if( superDef.isPrivate === true ) classSetting = classSetting | X.Class.PRIVATE_DATA;
\r
- opt_super = !!( classSetting & X.Class.SUPER_ACCESS );
\r
- params.push( classSetting );
\r
+ if( X.Type.isNumber( classSetting ) ){
\r
args.shift();
\r
args.shift();
\r
+ } else {
\r
+ classSetting = superDef.setting;
\r
};
\r
};
\r
+ if( superDef.isPrivate ) classSetting = classSetting | X.Class.PRIVATE_DATA;
\r
+ opt_super = !!( classSetting & X.Class.SUPER_ACCESS );
\r
+ params.push( classSetting );
\r
+
\r
+ // サブクラスのシャドウ
\r
if( X.Class._getClass( args[ 0 ] ) ){
\r
params.push( args.shift() );
\r
} else
\r
if( superDef.privateClass ){
\r
params.push( superDef.privateClass );
\r
};
\r
if( X.Class._getClass( args[ 0 ] ) ){
\r
params.push( args.shift() );
\r
} else
\r
if( superDef.privateClass ){
\r
params.push( superDef.privateClass );
\r
};
\r
- params.push( args[ 0 ] ); /* props */
\r
+ params.push( args[ 0 ] ); /* props サブクラスでは未定義でも可 */
\r
+
\r
+ // 継承クラスの作成
\r
Super.__new = null;
\r
traits = new Super();
\r
Super.__new = C;
\r
Super.__new = null;
\r
traits = new Super();
\r
Super.__new = C;
\r
- klass = X.Class.create.apply(
null
, params );
\r
+ klass = X.Class.create.apply(
X.Class
, params );
\r
traits = null;
\r
traits = null;
\r
+
\r
+ // 継承用プロパティを控える
\r
if( opt_super === true ){
\r
def = X.Class._getClassDef( klass );
\r
def.Super = Super;
\r
def.SuperProto = Super.prototype;
\r
def.SuperConstructor = superDef[ CONSTRUCTOR ];
\r
};
\r
if( opt_super === true ){
\r
def = X.Class._getClassDef( klass );
\r
def.Super = Super;
\r
def.SuperProto = Super.prototype;
\r
def.SuperConstructor = superDef[ CONSTRUCTOR ];
\r
};
\r
+
\r
return klass;
\r
};
\r
\r
return klass;
\r
};
\r
\r
@@
-176,7
+178,7
@@
X.Class = ( function(){
SUPER_ACCESS : 8,
\r
PRIVATE_DATA : 16,
\r
create : function( /* displayName, classSetting, opt_PrivateClass, props */ ){
\r
SUPER_ACCESS : 8,
\r
PRIVATE_DATA : 16,
\r
create : function( /* displayName, classSetting, opt_PrivateClass, props */ ){
\r
- var args = copyArray( arguments ),
\r
+ var args =
X.
copyArray( arguments ),
\r
displayName = args[ 0 ],
\r
classSetting,
\r
opt_pool, opt_abstract, opt_final, opt_private,
\r
displayName = args[ 0 ],
\r
classSetting,
\r
opt_pool, opt_abstract, opt_final, opt_private,
\r
@@
-188,19
+190,24
@@
X.Class = ( function(){
classDef.displayName = displayName;
\r
args.shift();
\r
};
\r
classDef.displayName = displayName;
\r
args.shift();
\r
};
\r
- classSetting = args[ 0 ];
\r
- if( X.Type.isNumber( classSetting ) === true ){
\r
+
\r
+ // クラス設定
\r
+ classDef.setting = classSetting = args[ 0 ];
\r
+ if( X.Type.isNumber( classSetting ) ){
\r
opt_pool = !!( classSetting & X.Class.POOL_OBJECT );
\r
opt_abstract = !!( classSetting & X.Class.ABSTRACT );
\r
opt_final = !!( classSetting & X.Class.FINAL );
\r
opt_private = !!( classSetting & X.Class.PRIVATE_DATA );
\r
opt_pool = !!( classSetting & X.Class.POOL_OBJECT );
\r
opt_abstract = !!( classSetting & X.Class.ABSTRACT );
\r
opt_final = !!( classSetting & X.Class.FINAL );
\r
opt_private = !!( classSetting & X.Class.PRIVATE_DATA );
\r
- if( opt_final
=== true && opt_abstract === true
){
\r
+ if( opt_final
&& opt_abstract
){
\r
X.Notification.critical( 'final & Abstract!' );
\r
return;
\r
X.Notification.critical( 'final & Abstract!' );
\r
return;
\r
- };
\r
+ };
\r
args.shift();
\r
args.shift();
\r
+ } else {
\r
+ classDef.setting = 0;
\r
};
\r
\r
};
\r
\r
+ // シャドウクラス
\r
if( PRIVATE_CLASS_LIST.indexOf( args[ 0 ] ) !== -1 ){
\r
privateDef = X.Class._getClassDef( args[ 0 ] );
\r
if( privateDef.isPrivate !== true ){
\r
if( PRIVATE_CLASS_LIST.indexOf( args[ 0 ] ) !== -1 ){
\r
privateDef = X.Class._getClassDef( args[ 0 ] );
\r
if( privateDef.isPrivate !== true ){
\r
@@
-213,13
+220,18
@@
X.Class = ( function(){
};
\r
classDef.privateClass = args.shift();
\r
};
\r
};
\r
classDef.privateClass = args.shift();
\r
};
\r
- props = args[ 0 ];
\r
- if( props === null || X.Type.isObject( props ) === false ){
\r
- X.Notification.critical( 'No Class Def!' );
\r
- return;
\r
- };
\r
\r
\r
- if( props[ CONSTRUCTOR ] && X.Type.isFunction( props[ CONSTRUCTOR ] ) === true ){
\r
+ // インスタンスのメンバー
\r
+ props = args[ 0 ];
\r
+ if( props === null || !X.Type.isObject( props ) ){
\r
+ // サブクラスの場合、クラス定義の上書きがなくても作成可能
\r
+ if( !traits ){
\r
+ X.Notification.critical( 'No Class Def!' );
\r
+ return;
\r
+ };
\r
+ props = {};
\r
+ } else
\r
+ if( props[ CONSTRUCTOR ] && X.Type.isFunction( props[ CONSTRUCTOR ] ) ){
\r
classDef[ CONSTRUCTOR ] = props[ CONSTRUCTOR ];
\r
};
\r
\r
classDef[ CONSTRUCTOR ] = props[ CONSTRUCTOR ];
\r
};
\r
\r
@@
-289,7
+301,7
@@
X.Class = ( function(){
if( PRIVATE_DEF_LIST.indexOf( KlassOrInstance ) !== -1 ) return KlassOrInstance;
\r
},
\r
_newPrivate : function( /* instance, args */ ){
\r
if( PRIVATE_DEF_LIST.indexOf( KlassOrInstance ) !== -1 ) return KlassOrInstance;
\r
},
\r
_newPrivate : function( /* instance, args */ ){
\r
- var args = copyArray( arguments ),
\r
+ var args =
X.
copyArray( arguments ),
\r
user = args.shift(),
\r
def = X.Class._getClassDef( user ),
\r
privateClass = def.privateClass,
\r
user = args.shift(),
\r
def = X.Class._getClassDef( user ),
\r
privateClass = def.privateClass,
\r