リビジョン | 8f7d3b51ec53fe81a2aadf90783abcd6367a32e5 (tree) |
---|---|
日時 | 2013-01-16 08:59:48 |
作者 | itozyun <itozyun@user...> |
コミッター | itozyun |
version 0.5.42, fixed Class.
@@ -1,6 +1,6 @@ | ||
1 | 1 | /* |
2 | 2 | * pettanR system.js |
3 | - * version 0.5.41 | |
3 | + * version 0.5.42 | |
4 | 4 | * |
5 | 5 | * gadgetOS |
6 | 6 | * author: |
@@ -133,6 +133,7 @@ var Class = ( function(){ | ||
133 | 133 | GET_INDEX = Util.getIndex, |
134 | 134 | abstractFlag = true, |
135 | 135 | privateFlag = true, |
136 | + killPrivateFlag = true, | |
136 | 137 | f = true, |
137 | 138 | c = Util.copyArray, |
138 | 139 | a; /* arguments */ |
@@ -173,7 +174,6 @@ var Class = ( function(){ | ||
173 | 174 | /* over のプロパティを target にコピーする.ただし target の プロパティが優先, force で解除 */ |
174 | 175 | function override( target, over, force ){ |
175 | 176 | for( var p in over ){ |
176 | - if( p === CONSTRUCTOR ) continue; | |
177 | 177 | if( force === true || typeof target[ p ] === 'undefined' ){ |
178 | 178 | target[ p ] = over[ p ]; |
179 | 179 | }; |
@@ -208,16 +208,16 @@ var Class = ( function(){ | ||
208 | 208 | opt_super = !!( classSetting & Class.SUPER_ACCESS ); |
209 | 209 | params.push( args.shift() ); |
210 | 210 | }; |
211 | - if( getClassDef( args[ 0 ] ) ){ | |
212 | - params.push( args.shift() ); | |
211 | + if( !getClass( args[ 0 ] ) ){ | |
212 | + params.push( superDef.privateClass || null ); | |
213 | 213 | } else { |
214 | - superDef.privateClass && params.push( superDef.privateClass ); | |
214 | + params.push( args.shift() ); | |
215 | 215 | }; |
216 | - params.push( override( new Super(), args[ 0 ], true ) ); /* props */ | |
217 | - | |
218 | 216 | abstractFlag = false; |
219 | - klass = Class.create.apply( null, params ); | |
217 | + params.push( override( new Super(), args[ 0 ], true ) ); /* props */ | |
220 | 218 | abstractFlag = true; |
219 | + | |
220 | + klass = Class.create.apply( Class, params ); | |
221 | 221 | if( opt_super === true ) getClassDef( klass ).Super = Super.prototype; |
222 | 222 | return klass; |
223 | 223 | }; |
@@ -229,6 +229,9 @@ var Class = ( function(){ | ||
229 | 229 | klass = getClass( instance ), |
230 | 230 | def = getClassDef( klass ), |
231 | 231 | privateData, p, i; |
232 | + if( def.isPrivate === true && killPrivateFlag === true ){ | |
233 | + throw new Error( 'PrivateInstance.kill() work in PrivateUser.kill().' ); | |
234 | + }; | |
232 | 235 | Type.isFunction( instance.onKill ) === true && instance.onKill(); |
233 | 236 | for( p in instance ){ |
234 | 237 | if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue; |
@@ -241,7 +244,9 @@ var Class = ( function(){ | ||
241 | 244 | if( def.privateClass ){ |
242 | 245 | privateData = klass.getPrivateData( instance ); |
243 | 246 | if( privateData ){ |
247 | + killPrivateFlag = false; | |
244 | 248 | privateData.kill(); |
249 | + killPrivateFlag = true; | |
245 | 250 | i = GET_INDEX( def.dataList, privateData ); |
246 | 251 | def.dataList.splice( i, 1 ); |
247 | 252 | def.userList.splice( i, 1 ); |
@@ -332,7 +337,16 @@ var Class = ( function(){ | ||
332 | 337 | function G(){ |
333 | 338 | var klass = this, |
334 | 339 | def = getClassDef( klass ), |
335 | - instance; | |
340 | + instance; | |
341 | + if( def.Abstract === true ){ | |
342 | + if( abstractFlag === true ){ | |
343 | + throw new Error( 'AbstractClass!' ); | |
344 | + }; | |
345 | + f = false; | |
346 | + instance = new klass(); | |
347 | + f = true; | |
348 | + return instance; | |
349 | + }; | |
336 | 350 | if( def.pool && def.pool.length > 0 ){ |
337 | 351 | instance = def.pool.shift(); |
338 | 352 | } else { |
@@ -368,19 +382,6 @@ var Class = ( function(){ | ||
368 | 382 | }; |
369 | 383 | return instance; |
370 | 384 | }; |
371 | - /* Constructor Real for AbstractClass */ | |
372 | - function A(){ | |
373 | - var klass = this, | |
374 | - instance; | |
375 | - if( abstractFlag === true ){ | |
376 | - throw new Error( 'AbstractClass!' ); | |
377 | - }; | |
378 | - f = false; | |
379 | - instance = new klass(); | |
380 | - f = true; | |
381 | - return instance; | |
382 | - }; | |
383 | - | |
384 | 385 | |
385 | 386 | return { |
386 | 387 | POOL_OBJECT : 1, |
@@ -413,9 +414,11 @@ var Class = ( function(){ | ||
413 | 414 | args.shift(); |
414 | 415 | }; |
415 | 416 | privateDef = getClassDef( args[ 0 ] ); |
416 | - if( privateDef ){ | |
417 | + if( !privateDef ){ | |
418 | + args[ 0 ] === null && args.shift(); | |
419 | + } else { | |
417 | 420 | if( privateDef.isPrivate !== true ){ |
418 | - throw new Error( 'PrivateClass not found! please, Class.createPrivateData().' ); | |
421 | + throw new Error( 'PrivateClass not found! please, Class.create( Class.PRIVATE, {...} ).' ); | |
419 | 422 | } else |
420 | 423 | if( privateDef.Abstract === true ){ |
421 | 424 | throw new Error( 'PrivateClass is Abstract!' ); |
@@ -429,12 +432,9 @@ var Class = ( function(){ | ||
429 | 432 | |
430 | 433 | if( Type.isFunction( props[ CONSTRUCTOR ] ) === true ){ |
431 | 434 | classDef[ CONSTRUCTOR ] = props[ CONSTRUCTOR ]; |
435 | + delete props[ CONSTRUCTOR ]; | |
432 | 436 | }; |
433 | 437 | |
434 | - if( opt_abstract === true ){ | |
435 | - klass = function(){ a = arguments; if( f ) return A.apply( a.callee, c( a ) )}; | |
436 | - classDef.Abstract = true; | |
437 | - } else | |
438 | 438 | if( opt_private === true ){ |
439 | 439 | klass = function(){ a = arguments; if( f ) return P.apply( a.callee, c( a ) )}; |
440 | 440 | if( opt_pool === true ) classDef.pool = []; |
@@ -444,8 +444,9 @@ var Class = ( function(){ | ||
444 | 444 | classDef.pool = []; |
445 | 445 | classDef.live = []; |
446 | 446 | }; |
447 | + if( opt_abstract === true ) classDef.Abstract = true; | |
447 | 448 | }; |
448 | - klass.prototype = override( override( {}, props, true ), ClassBase, false ); | |
449 | + klass.prototype = override( props, ClassBase, false ); | |
449 | 450 | |
450 | 451 | if( opt_final === true ){ |
451 | 452 | classDef.Final = true; |