черная магия
Привет всем, ей богу, не понимаю как в данном примере работает 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:29. |