Array.prototype.splice is fully defined in ECMA-262 §15.4.4.12, so use this as your specification and write. eg.
15.4.4.12 Array.prototype.splice(start, deleteCount [, item1 [, item2 [,...]]])
start, deleteCount () item1, item2 .., deleteCount item1, item2 .. Array, ( ) . :...
, , , , , , start + deleteCount .
, , , . , . , - Array Math.max/min. , .
push , .
function arraySplice(array, start, deleteCount) {
var result = [];
var removed = [];
var argsLen = arguments.length;
var arrLen = array.length;
var i, k;
start = parseInt(start, 10);
deleteCount = parseInt(deleteCount, 10);
if (start < 0) {
start = arrLen + start;
start = (start > 0)? start : 0;
} else {
start = (start < arrLen)? start : arrLen;
}
if (deleteCount < 0) deleteCount = 0;
if (deleteCount > (arrLen - start)) {
deleteCount = arrLen - start;
}
for (i = 0; i < start; i++) {
result[i] = array[i];
}
for (i = 3; i < argsLen; i++) {
result.push(arguments[i]);
}
for (i = start; i < start + deleteCount; i++) {
removed.push(array[i]);
}
for (i = start + (deleteCount || 0); i < arrLen; i++) {
result.push(array[i]);
}
array.length = 0;
i = result.length;
while (i--) {
array[i] = result[i];
}
return removed;
}