Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Основы JS по Флэнэгану; (https://javascript.ru/forum/misc/13989-osnovy-js-po-flehnehganu%3B.html)

x-yuri 11.01.2011 02:01

Цитата:

Сообщение от UpJump
Первый аргумент как я понял ссылается на объект посредством которого будет выполнен метод.

первый аргумент будет доступен через this во время вызова функции
function a( p ){
    alert([ this.b, p ]);
}
a.call({b: 3}, 4);

т.е. с помощью call/apply ты можешь указать, для какого объекта вызвать функцию

UpJump 11.01.2011 14:45

все всем спасибо - разобрался!:) не внимательно читал или не понял вначале.

Kepa 12.01.2011 16:38

Всем привет, а вот и очередной вопрос, на этот раз общего плана:

Читая про массивы встретил такую строчку - "JavaScript не поддерживает 'настоящие' многомерные массивы, но позволяет имитировать их при помощи массива из массивов." Так вот, подобное я встречаю уже не первый раз (кажется, еще в учебнике по С такое было, может еще где-то) и у меня всегда возникал вопрос, а что же такое "настоящие" многомерные массивы и встречаются ли они в языках программирования?

x-yuri 13.01.2011 07:31

насколько я понял, есть разные мнения на тему того, что такое "настоящий" массив:

1) предусмотрен ли в языке специальный синтаксис для многомерных массивов (есть ли многомерные массивы на уровне языка). C, например, не проходит по этому критерию, но проходит по следующему

2) как такие массивы реализованы: либо есть один непрерывный блок, хранящий последовательно все значения, либо есть много одномерных массивов, связанных друг с другом. Непрерывный блок может быть лучше с точки зрения производительности, но такие массивы менее гибкие, мало где нужны и мало где остались

по первому критерию, проходит BASIC

но в любом случае, тут не чем хвастаться

а вот как работали с многомерными массивами в perl, пока там не появились ссылки
Код:

@john = (47, "brown", 186); @mary = (23, "hazel", 128); @bill = (35, "blue", 157);
@vitals = ('john', 'mary', 'bill');

Код:

$vitals = $vitals[0]; eval "\$${vitals}[1] = 'red'";
или

Код:

local(*array) = $vitals[0];  # Alias *array to *john
$array[1] = 'red';          # Actually sets $john[1].

UPD, по поводу первого критерия... C не знает, что такое многомерный массив. Когда ты пишешь int a[5][7], для него это int (a[5])[7]. Т.е. он рассматривает это как массив c элементами типа int[7], просто у C гибкая система типов. Но когда ты в BASIC пишешь DIM A(5,7)... он не может не знать, что это многомерный массив

Kepa 13.01.2011 14:26

Ясно, спасибо.

Хотя я так понял - разницы по большому счету нет. Первый критерий вообще получается ни на что не влияет, а второй насколько я понимаю уже умер, т.к. даже в С если делать динамический массив, то под новые элементы надо выделять отдельно память, которая будет располагаться вне начального блока памяти.

x-yuri 13.01.2011 15:14

ну как, по крайней мере, мне было бы интересно, если бы меня разубедили, что "настоящие" массивы уже не актуальны :)

Kepa 13.01.2011 23:32

Ну я этим точно не буду заниматься (:


Часовой пояс GMT +3, время: 06:37.