You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							49 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							49 lines
						
					
					
						
							2.1 KiB
						
					
					
				'use strict'; | 
						|
var $ = require('../internals/export'); | 
						|
var isObject = require('../internals/is-object'); | 
						|
var isArray = require('../internals/is-array'); | 
						|
var toAbsoluteIndex = require('../internals/to-absolute-index'); | 
						|
var toLength = require('../internals/to-length'); | 
						|
var toIndexedObject = require('../internals/to-indexed-object'); | 
						|
var createProperty = require('../internals/create-property'); | 
						|
var wellKnownSymbol = require('../internals/well-known-symbol'); | 
						|
var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); | 
						|
var arrayMethodUsesToLength = require('../internals/array-method-uses-to-length'); | 
						|
 | 
						|
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); | 
						|
var USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); | 
						|
 | 
						|
var SPECIES = wellKnownSymbol('species'); | 
						|
var nativeSlice = [].slice; | 
						|
var max = Math.max; | 
						|
 | 
						|
// `Array.prototype.slice` method | 
						|
// https://tc39.github.io/ecma262/#sec-array.prototype.slice | 
						|
// fallback for not array-like ES3 strings and DOM objects | 
						|
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { | 
						|
  slice: function slice(start, end) { | 
						|
    var O = toIndexedObject(this); | 
						|
    var length = toLength(O.length); | 
						|
    var k = toAbsoluteIndex(start, length); | 
						|
    var fin = toAbsoluteIndex(end === undefined ? length : end, length); | 
						|
    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible | 
						|
    var Constructor, result, n; | 
						|
    if (isArray(O)) { | 
						|
      Constructor = O.constructor; | 
						|
      // cross-realm fallback | 
						|
      if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { | 
						|
        Constructor = undefined; | 
						|
      } else if (isObject(Constructor)) { | 
						|
        Constructor = Constructor[SPECIES]; | 
						|
        if (Constructor === null) Constructor = undefined; | 
						|
      } | 
						|
      if (Constructor === Array || Constructor === undefined) { | 
						|
        return nativeSlice.call(O, k, fin); | 
						|
      } | 
						|
    } | 
						|
    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0)); | 
						|
    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); | 
						|
    result.length = n; | 
						|
    return result; | 
						|
  } | 
						|
});
 | 
						|
 |