'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; | |
} | |
}); |