'use strict'; var toInteger = require('../../../number/to-integer') , toPosInt = require('../../../number/to-pos-integer') , isPlainArray = require('../../is-plain-array') , isArray = Array.isArray, slice = Array.prototype.slice , hasOwnProperty = Object.prototype.hasOwnProperty, max = Math.max; module.exports = function (start, end) { var length, result, i; if (!this || !isArray(this) || isPlainArray(this)) { return slice.apply(this, arguments); } length = toPosInt(this.length); start = toInteger(start); if (start < 0) start = max(length + start, 0); else if (start > length) start = length; if (end === undefined) { end = length; } else { end = toInteger(end); if (end < 0) end = max(length + end, 0); else if (end > length) end = length; } if (start > end) start = end; result = new this.constructor(end - start); i = 0; while (start !== end) { if (hasOwnProperty.call(this, start)) result[i] = this[start]; ++i; ++start; } return result; };