@@ -98,6 +98,26 @@ function _Array(conf) {
98
98
}
99
99
} ) ;
100
100
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
+
101
121
function _add ( val , action , start , deleteCount ) {
102
122
var isClass = false ,
103
123
i = 0 ,
@@ -248,15 +268,21 @@ function _Array(conf) {
248
268
* @param {_Component|Object } val
249
269
*/
250
270
arr . push = function push ( val ) {
251
- return _add ( val , 'push' ) ;
271
+ var result = _add ( val , 'push' ) ;
272
+ _copy ( ) ;
273
+
274
+ return result ;
252
275
} ;
253
276
254
277
/* Override unshift method.
255
278
* @unshift
256
279
* @param {_Component|Object } val
257
280
*/
258
281
arr . unshift = function unshift ( val ) {
259
- return _add ( val , 'unshift' ) ;
282
+ var result = _add ( val , 'unshift' ) ;
283
+ _copy ( ) ;
284
+
285
+ return result ;
260
286
} ;
261
287
262
288
/* Override concat method.
@@ -265,7 +291,8 @@ function _Array(conf) {
265
291
*/
266
292
arr . concat = function concat ( arr ) {
267
293
var i = 0 ,
268
- length = 0 ;
294
+ length = 0 ,
295
+ result = null ;
269
296
270
297
if ( Array . isArray ( arr ) ) {
271
298
length = arr . length ;
@@ -275,23 +302,33 @@ function _Array(conf) {
275
302
}
276
303
277
304
conf . arr = arrDb ;
278
- return new _Array ( conf ) ;
305
+
306
+ result = new _Array ( conf ) ;
307
+ _copy ( ) ;
308
+
309
+ return result ;
279
310
} ;
280
311
281
312
/* Override pop method.
282
313
* @pop
283
314
* @return {_Component|Object } value
284
315
*/
285
316
arr . pop = function pop ( ) {
286
- return _remove ( 'pop' ) ;
317
+ var result = _remove ( 'pop' ) ;
318
+ _copy ( ) ;
319
+
320
+ return result ;
287
321
} ;
288
322
289
323
/* Override shift method.
290
324
* @shift
291
325
* @return {_Component|Object } value
292
326
*/
293
327
arr . shift = function shift ( ) {
294
- return _remove ( 'shift' ) ;
328
+ var result = _remove ( 'shift' ) ;
329
+ _copy ( ) ;
330
+
331
+ return result ;
295
332
} ;
296
333
297
334
/* Override sort method.
@@ -300,6 +337,8 @@ function _Array(conf) {
300
337
* @return {_Array } the current _Array
301
338
*/
302
339
arr . sort = function sort ( funct ) {
340
+ var result = null ;
341
+
303
342
arrDb . sort ( funct ) ;
304
343
305
344
if ( $helper . isRuntime ( ) ) {
@@ -311,7 +350,10 @@ function _Array(conf) {
311
350
} ) ;
312
351
}
313
352
314
- return arr ;
353
+ result = arr ;
354
+ _copy ( ) ;
355
+
356
+ return result ;
315
357
} ;
316
358
317
359
/* Override reverse method.
@@ -329,6 +371,9 @@ function _Array(conf) {
329
371
'value' : arrDb
330
372
} ) ;
331
373
}
374
+
375
+ _copy ( ) ;
376
+
332
377
return arr ;
333
378
} ;
334
379
@@ -374,6 +419,9 @@ function _Array(conf) {
374
419
} ) ;
375
420
}
376
421
}
422
+
423
+ _copy ( ) ;
424
+
377
425
return result ;
378
426
} ;
379
427
@@ -383,6 +431,8 @@ function _Array(conf) {
383
431
*/
384
432
arr . slice = function slice ( begin , end ) {
385
433
var result = arrDb . slice ( begin , end ) ;
434
+ _copy ( ) ;
435
+
386
436
return result ;
387
437
} ;
388
438
0 commit comments