|
|
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Пишут в учебнике, что в call остальными аргументами кроме первого можно передавать только переменные, а в aplly - только массив. Что мешает в call второй переменной передать массив? В чем тогда нужность метода aplly? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:11 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerЧто мешает в call второй переменной передать массив?ничего не мешает. Но эффект будет не такой же, как при передаче массива в apply lanzerВ чем тогда нужность метода aplly?для случая, если фактические параметры упакованы в массив. В общем и целом - apply более универсален, т.к. параметры всегда можно собрать в массив и вместо call(th, a, b, c) написать apply(th, [a, b, c]) , а вот наоборот - никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:20 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
допустим, я написал функцию "по регистрации коллекции каких-то значений допустим асинхронно в БД" на вход ей требуется массив этих самых регистрируемых значений --------------------------------------------------------------------------------------------------------- потом Вы захотели воспользоваться ею в своих целях, но задавая какой-то свой this покажите, как Вы будете вызывать ее посредством call и как-посредством apply ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 16:21 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Яростный МечlanzerЧто мешает в call второй переменной передать массив?ничего не мешает. Но эффект будет не такой же, как при передаче массива в apply lanzerВ чем тогда нужность метода aplly?для случая, если фактические параметры упакованы в массив. Так и не понял почему эффект не будет таким же. Это ведь тот же массив. Допустим: Код: javascript 1. 2. 3. Паганель потом Вы захотели воспользоваться ею в своих целях, но задавая какой-то свой this Насчет this тоже неясно, вот для себя нашел короткий пример , казалось бы math.min уже написан c использованием this и в этом дело. Но если на практике я бы писал свой math.min, что бы мешало передавать туда просто объект без call или apply, и обращать к нему по такому имени внутри функции, допустим как по math_object, а не по this. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:03 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerТак и не понял почему эффект не будет таким же. Это ведь тот же массив. Допустим: Код: javascript 1. 2. 3. если на одном только прочтении учебника этот момент не усваивается, советую глянуть под дебагом, а потом перечитать главу про call и apply ещё раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:09 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerТак и не понял почему эффект не будет таким же. Это ведь тот же массив. Допустим: Код: javascript 1. 2. 3. разница в удобстве... например в Вашем примере первый вызов выполнит myfunction([]), а второй myfunction() то есть, представим у нас есть функция Код: javascript 1. 2. 3. 4. 5. 6. 7. Итак, имея массив значений, вызывая данную функцию в другом контексте мы можем написать: Код: javascript 1. или просто Код: javascript 1. второй явно удобнее :) Или например если одна функция вызывается из другой, и первой ничего неизвестно об аргументах второй (такая себе функция обёртка)... через call Вы не сможете вызвать нормально внутреннюю функцию, так как Вам надо будет во внешней функции явно знать требующиеся аргументы первой и их количество. А вот так будет всё ок: Код: javascript 1. 2. 3. 4. 5. Вот так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 17:31 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Програмёрразница в удобстве... Итак, имея массив значений, вызывая данную функцию в другом контексте мы можем написать: Код: javascript 1. или просто Код: javascript 1. второй явно удобнее :) Удобнее, конечно, но что мешает и в call также вызывать: Код: javascript 1. В учебнике пишут. авторПервый аргумент методов call() и apply() – это объект, для которого выполняется функция; этот аргумент становится значением ключевого слова this в теле функции. Все оставшиеся аргументы call() – это значения, пере даваемые вызываемой функции. Все оставшиеся аргументы call - это значения пере даваемые вызываемой функции. Значением может быть и массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 18:35 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerчто мешает и в call также вызывать: Код: javascript 1. ну я же говорю, допустим моя функция просит на вход один аргумент, являющийся массивом, например Код: javascript 1. 2. 3. "обычное" ее использование я, как автор, предполагал примерно таким: Код: javascript 1. 2. как Вы будете вызывать ее посредством call и как-посредством apply ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 18:51 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzer Удобнее, конечно, но что мешает и в call также вызывать: Код: javascript 1. Представьте, что Вы используете библиотеку (фреймворк), которую писали не Вы (предшественник по работе, или например просто какая-то знаменитая типа jQuery). И в этой библиотеке есть функция: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. А теперь попробуйте выполнить: Код: javascript 1. Как думаете, что вернёт функция, независимо от верности введённой даты? А вернёт false, потому как type никогда не будет соответствовать строке 'date'. Вот в этом то и разница передачи массива в apply и в call. Но, если Вы и сейчас не можете понять почему - надо забить в гугле "разница между call и apply" и открывая все ссылки по очереди читать до наступления просветления. Можно ещё в примерах использования покопаться. Если просветление не придёт - читайте статьи более общего содержания про js (видимо Вы ещё не улавливаете в принципе смысл происходящего)... ну и т.д. P.S. Только не верьте разным надписям, где говорится что javascript - красивый и изящный язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 19:12 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerТак и не понял почему эффект не будет таким же. Это ведь тот же массив. Допустим: Код: javascript 1. 2. 3. в первом случае функции будет передан 1 аргумент (пустой массив), во втором - ни одного аргумента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 19:23 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Пишут в ЕСMA по apply , что если в apply передать не объект, то сгенерируется исключение TypeError. Обязательный тип аргументов метода call не приводиться . Паганельlanzerчто мешает и в call также вызывать: Код: javascript 1. ну я же говорю, допустим моя функция просит на вход один аргумент, являющийся массивом, например Код: javascript 1. 2. 3. "обычное" ее использование я, как автор, предполагал примерно таким: Код: javascript 1. 2. как Вы будете вызывать ее посредством call и как-посредством apply ? Именно поэтому получается, что только при помощи apply можно в Вашем примере передавать массив. lanzerПишут в учебнике, что в call остальными аргументами кроме первого можно передавать только переменные, а в aplly - только массив. Что мешает в call второй переменной передать массив? В чем тогда нужность метода aplly? Вопрос приобрел новую форму(впринципе в этом больше всего и была его суть с самого начала). Зачем потребовалось делать два разных метода, что мешало сделать один универсальный, чтобы туда можно было что-угодно передавать: массивы, объекты, аргументы? Разница в названиях call и apply при одной и той же главной сути(передача объекта для использования его как this) также приводят в смятение, почему не call_via_args и call_via_object. Т.е. я по кр. мере не вижу какого-то еще одного главного различия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 21:17 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerЗачем потребовалось делать два разных метода, что мешало сделать один универсальный, чтобы туда можно было что-угодно передавать: массивы, объекты, аргументы?я тебе сразу написал, что apply универсален, его можно юзать вместо call 14649444 call сделан только для удобства, чтобы параметры не приходилось оборачивать в массив, если они доступны по отдельности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 21:22 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerтолько при помощи apply можно в Вашем примере передавать массивВы бы хоть попробовали что ли http://jsfiddle.net/f3WMW/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 21:30 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Паганельlanzerтолько при помощи apply можно в Вашем примере передавать массивВы бы хоть попробовали что ли http://jsfiddle.net/f3WMW/ Ну да, тип аргументов не указан, значит они могут быть любыми, в том числе объектом. Пардон, совсем упустил из вида. Яростный мечя тебе сразу написал, что apply универсален, его можно юзать вместо call 14649444 Как раз наоборот получается. Вот пример, где при помощи call передается и переменная и массив. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И зачем тогда нужен apply? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 22:44 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerПаганельпропущено... Вы бы хоть попробовали что ли http://jsfiddle.net/f3WMW/ Ну да, тип аргументов не указан, значит они могут быть любыми, в том числе объектом. Пардон, совсем упустил из вида. Яростный мечя тебе сразу написал, что apply универсален, его можно юзать вместо call 14649444 Как раз наоборот получается. Вот пример, где при помощи call передается и переменная и массив. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И зачем тогда нужен apply? просветление не пришло... Вы понимаете разницу между "в функцию можно передавать только массив" и "параметры функции передаются через массив"... Так вот, Вы пишите словно к apply относится первая фраза... А реально к apply относится именно вторая фраза. В функцию параметры передаются через массив (то есть подаёте массив, он разбирается и в функцию приходят параметры). Ну это нереально. Вы троллите просто, или реально не понимаете о чём мы все тут говорим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:05 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
lanzerИ зачем тогда нужен apply?хорошо, другой пример: у тебя есть функция func, которая принимает некоторое число параметров. значения этих параметров лежат в массиве arr как вызвать func для этих значений? стандартное решение - func.apply(obj, arr) а теперь попробуй без apply ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:08 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
все примеры высосаны из пальца, apply придумали чтобы нарезать и закидывать в неё коллекцию arguments у текущего контекста вызова, а так же дергать функции с вариативным числом аргументов. И вообще, не читайте за обедом советских газет (с), читайте англоязычную прессу, там лучше разжевывают: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2013, 23:42 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
зывсе примеры высосаны из пальцада ну? Вы никогда не встречали чужую функцию, которая на вход хочет массив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 08:23 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Паганельда ну? Вы никогда не встречали чужую функцию, которая на вход хочет массив? не знаю как это относится к вопросу автора, который спрашивал, нафига нужен apply, если есть call ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 13:44 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы это узнать, попробуйте сами ответить на мой вопрос , ато автор так и не ответил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 13:48 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
ПаганельДля того, чтобы это узнать, попробуйте сами ответить на мой вопрос , ато автор так и не ответил Код: javascript 1. 2. 3. 4. 5. 6. Да вот только не один уже пример подобного рода приводили. Автор не может осознать разницу между двумя записями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 13:56 |
|
||
|
Передача разнотипных аргументов в call, apply.
|
|||
|---|---|---|---|
|
#18+
Теперь понял. Не троллю, просто неправильно понимал этот абзац из учебника: авторМетод apply() похож на метод call(), за исключением того, что передаваемые функции аргументы задаются в виде массива: Англоязычную прессу почитаем в будущем, положил в to_read, сейчас хотя-бы основное понять. Всем выражаю большую благодарность за терпение к моему вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:27 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38352063&tid=1448044]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 466ms |

| 0 / 0 |
