2014-03-06 3 views
0

В JavaScript есть причина предпочестьразница между разговором и prototype.call

это:

[].forEach.call(...) 

по этому поводу:

[].prototype.forEach.call(...) 

..?

+0

Более короткая цепь, чтобы перейти к методу. Оба они ссылаются на одну и ту же функцию. Если вы использовали 'Array' (вместо' [] '), вам придется использовать' Array.prototype.forEach' – Ian

+0

@Ian Вы что-то пропустили: нет '[] .prototype'. –

+0

@ Спасибо Спасибо! (не знал об этом!) – UJC

ответ

1

Первый из них короче, поэтому его легче читать и потенциально предотвращать горизонтальную прокрутку.

Второй глючит как там нет [].prototype (Вы имели в виду [].constructor.prototype?)

Третий будет

Array.prototype.forEach.call(...) 

Это один является более прямым и теоретически быстрее, так как то, что вы получаете с первый косвенно является свойством, которое фактически привязано к прототипу.

0

Второй пример не будет работать, так что если мы исправим его ...

Array.prototype.forEach.call 

Теперь, если мы сравним это с [].forEach.call, разница в том, что с прототипом-версии, вы не создавая объект массива throwaway.

Независимо от того, имеет ли это значение на практике, зависит от вашего конкретного случая. Если вы делаете это несколько раз сотни или, может быть, тысячи раз, создание этих массивных объектов массива может привести к более высокому использованию памяти и более медленным прогонам GC по сравнению с вызовом функции напрямую через прототип.

Смежные вопросы