@@ -98,6 +98,26 @@ function _Array(conf) {
9898 }
9999 } ) ;
100100
101+ function _copy ( ) {
102+ var i = 0 ,
103+ j = 0 ,
104+ length = arr . length ;
105+
106+ arrDb . forEach ( function ( val ) {
107+ if ( $metamodel . isClassName ( type ) ) {
108+ arr [ i ] = $helper . getRuntime ( ) . require ( val ) ;
109+ } else {
110+ arr [ i ] = val ;
111+ }
112+ i = i + 1 ;
113+ } ) ;
114+
115+ for ( j = i ; j < length ; j ++ ) {
116+ delete arr [ j ] ;
117+ }
118+ arr . length = arrDb . length ;
119+ }
120+
101121 function _add ( val , action , start , deleteCount ) {
102122 var isClass = false ,
103123 i = 0 ,
@@ -248,15 +268,21 @@ function _Array(conf) {
248268 * @param {_Component|Object } val
249269 */
250270 arr . push = function push ( val ) {
251- return _add ( val , 'push' ) ;
271+ var result = _add ( val , 'push' ) ;
272+ _copy ( ) ;
273+
274+ return result ;
252275 } ;
253276
254277 /* Override unshift method.
255278 * @unshift
256279 * @param {_Component|Object } val
257280 */
258281 arr . unshift = function unshift ( val ) {
259- return _add ( val , 'unshift' ) ;
282+ var result = _add ( val , 'unshift' ) ;
283+ _copy ( ) ;
284+
285+ return result ;
260286 } ;
261287
262288 /* Override concat method.
@@ -265,7 +291,8 @@ function _Array(conf) {
265291 */
266292 arr . concat = function concat ( arr ) {
267293 var i = 0 ,
268- length = 0 ;
294+ length = 0 ,
295+ result = null ;
269296
270297 if ( Array . isArray ( arr ) ) {
271298 length = arr . length ;
@@ -275,23 +302,33 @@ function _Array(conf) {
275302 }
276303
277304 conf . arr = arrDb ;
278- return new _Array ( conf ) ;
305+
306+ result = new _Array ( conf ) ;
307+ _copy ( ) ;
308+
309+ return result ;
279310 } ;
280311
281312 /* Override pop method.
282313 * @pop
283314 * @return {_Component|Object } value
284315 */
285316 arr . pop = function pop ( ) {
286- return _remove ( 'pop' ) ;
317+ var result = _remove ( 'pop' ) ;
318+ _copy ( ) ;
319+
320+ return result ;
287321 } ;
288322
289323 /* Override shift method.
290324 * @shift
291325 * @return {_Component|Object } value
292326 */
293327 arr . shift = function shift ( ) {
294- return _remove ( 'shift' ) ;
328+ var result = _remove ( 'shift' ) ;
329+ _copy ( ) ;
330+
331+ return result ;
295332 } ;
296333
297334 /* Override sort method.
@@ -300,6 +337,8 @@ function _Array(conf) {
300337 * @return {_Array } the current _Array
301338 */
302339 arr . sort = function sort ( funct ) {
340+ var result = null ;
341+
303342 arrDb . sort ( funct ) ;
304343
305344 if ( $helper . isRuntime ( ) ) {
@@ -311,7 +350,10 @@ function _Array(conf) {
311350 } ) ;
312351 }
313352
314- return arr ;
353+ result = arr ;
354+ _copy ( ) ;
355+
356+ return result ;
315357 } ;
316358
317359 /* Override reverse method.
@@ -329,6 +371,9 @@ function _Array(conf) {
329371 'value' : arrDb
330372 } ) ;
331373 }
374+
375+ _copy ( ) ;
376+
332377 return arr ;
333378 } ;
334379
@@ -374,6 +419,9 @@ function _Array(conf) {
374419 } ) ;
375420 }
376421 }
422+
423+ _copy ( ) ;
424+
377425 return result ;
378426 } ;
379427
@@ -383,6 +431,8 @@ function _Array(conf) {
383431 */
384432 arr . slice = function slice ( begin , end ) {
385433 var result = arrDb . slice ( begin , end ) ;
434+ _copy ( ) ;
435+
386436 return result ;
387437 } ;
388438
0 commit comments