черная магия
Привет всем, ей богу, не понимаю как в данном примере работает slice:
function foo() { var args = Array.slice(arguments); alert( args.join('-') ); } foo('a', 'b', 'c', 'd', "1", "odin");почему вобще этот пример работает ??? каким боком функция slice превращает объект в индекс и делает срез всех аргументов из объекта arguments ?? такое чуство будто slice работает на подобие .call в котором можно передавать контекст для функции. Поясните пожалуйста эту чернейшую магию ! ) спасибо |
Ошибка.
Цитата:
|
в FF работает кстати, а в Google Chrome нет, странно вобще.
|
Цитата:
|
Цитата:
|
Arramis, нет там никакой "магии"... :D
Тебя обманули и код твой не рабочий... Цитата:
И все "массивные" методы к arguments неприменимы... |
Некая иллюстрация...
var a=[1,2,3]; alert('a - '+typeof a); var b=a.slice(0); alert(b.join('-')); // var o={1:1, 2:2, 3:3, length:3}; alert('o - '+typeof o); alert('o.length = '+o.length); // далее будет ошибка var c=o.slice(0); alert(c.join('-')); |
Цитата:
Цитата:
Тоесть вызов работает как если бы было var args = [].slice.call(arguments); |
Цитата:
Цитата:
Цитата:
|
В самом низу написано, что метод эквивалентен Array.prototype.slice.call, что бы не было путаницы.
https://developer.mozilla.org/en-US/...ts/Array/slice Так работает везде: (function() { alert( Array.prototype.slice.call(arguments).join('-') ); })('a', 'b', 'c', 'd', "1", "odin") |
Часовой пояс GMT +3, время: 01:19. |