Как вы ссылаетесь на Array.prototype.slice.call ()?

Я пишу сценарий, в котором мне нужно клонировать массивы во многих разных местах. По этой причине я хотел бы сделать следующее для эмуляции функции клонирования:

var clone = [].slice.call;
var arr1 = [1,2,3,4,5,6,7,8,9,10];
var arr2 = clone(arr1, 0);

К сожалению, приведенный выше код приводит к: TypeError: объект не является функцией . Я понимаю, что существует множество функций для глубокого клонирования и мелких копий, но я просто хочу использовать встроенный метод. Интересно, что следующее действительно работает:

var clone = [].slice;
var arr1 = [1,2,3,4,5,6,7,8,9,10];
var arr2 = clone.call(arr1, 0);

Кто-нибудь знает, почему первый блок не работает, а второй работает? Есть ли способ ссылаться на вызов функций и применять функции, не вызывая ошибок при вызове указанной функции?

7
задан Clarence Fredericks 26 July 2011 в 19:18
поделиться