Основные преимущества реализованы, когда «arr» - это не массив, а что-то как массив; в частности, что-то с свойством «длина» и свойствами с цифровым ключом. Хорошими примерами являются объекты arguments
и объекты NodeList из DOM. Эти вещи не будут иметь метод «среза», но они do имеют свойства с численным ключом и свойство «длина».
Трюк работает, потому что метод «среза» довольно прощает.
Если вы видите, что используется с тем, что, безусловно, массив уже, то вы смотрите на код, написанный на запутанном человека :)
О, и обратите внимание также, что укороченный является:
var foo = [].slice.call(arguments, 0);
Вам не обязательно обращаться к прототипу напрямую, если вы этого не хотите; вы можете получить его из экземпляра массива так же легко. (Да, это стоит фиктивное распределение, но в этот день и возраст я не удивлюсь, если виртуальные машины оптимизируют это.)
'arr' не может быть фактическим массивом. Это может быть параметр NodeList или параметр аргументов, поэтому метод среза недоступен. –