"use strict";

var isFunction     = require("../../function/is-function")
  , slice          = Array.prototype.slice
  , defineProperty = Object.defineProperty
  , desc           = { configurable: true, enumerable: true, writable: true, value: null };

module.exports = function (/* …items*/) {
	var result, i, length;
	if (!this || this === Array || !isFunction(this)) return slice.call(arguments);
	result = new this(length = arguments.length);
	for (i = 0; i < length; ++i) {
		desc.value = arguments[i];
		defineProperty(result, i, desc);
	}
	desc.value = null;
	result.length = length;
	return result;
};
