28 lines
909 B
JavaScript
28 lines
909 B
JavaScript
|
'use strict';
|
||
|
var $export = require('./_export')
|
||
|
, html = require('./_html')
|
||
|
, cof = require('./_cof')
|
||
|
, toIndex = require('./_to-index')
|
||
|
, toLength = require('./_to-length')
|
||
|
, arraySlice = [].slice;
|
||
|
|
||
|
// fallback for not array-like ES3 strings and DOM objects
|
||
|
$export($export.P + $export.F * require('./_fails')(function(){
|
||
|
if(html)arraySlice.call(html);
|
||
|
}), 'Array', {
|
||
|
slice: function slice(begin, end){
|
||
|
var len = toLength(this.length)
|
||
|
, klass = cof(this);
|
||
|
end = end === undefined ? len : end;
|
||
|
if(klass == 'Array')return arraySlice.call(this, begin, end);
|
||
|
var start = toIndex(begin, len)
|
||
|
, upTo = toIndex(end, len)
|
||
|
, size = toLength(upTo - start)
|
||
|
, cloned = Array(size)
|
||
|
, i = 0;
|
||
|
for(; i < size; i++)cloned[i] = klass == 'String'
|
||
|
? this.charAt(start + i)
|
||
|
: this[start + i];
|
||
|
return cloned;
|
||
|
}
|
||
|
});
|