Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вместо присвоения массива - линк 
V
    Опции темы
bars80080
Дата 14.9.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



вот код:
Код

<html><body>
<script>
var a = new Array(), b = new Array();
b = [1, 2, 3];
a = b;
b[1] = 1000;
alert(a[1]);
</script>
</body></html>

у меня линкуется и в ИЕ, и в ФФ
почему массив "а" оказался связан с массивом "b", а не просто получил его значения?
PM MAIL WWW   Вверх
Amphiluke
Дата 14.9.2009, 14:41 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Потому что a и b — это лишь указатели на объекты массивов. Когда вы пишете a=b, вы изменяете не массив, которым была инициализирована переменная a, а изменяете так сказать «направление», куда указывает переменная a.

Если нужна именно новая независимая копия массива, на который указывает b, то можно пользоваться функциями, которые возвращают новый объект массива:
Код

var a = new Array(), b = new Array();
b = [1, 2, 3];
a = b.slice(0);
b[1] = 1000;
alert(a[1]);



Это сообщение отредактировал(а) Amphiluke - 14.9.2009, 14:42
PM   Вверх
bars80080
Дата 14.9.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



мдя, и кто их этому надоумил?
PM MAIL WWW   Вверх
Amphiluke
Дата 14.9.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Между прочим, весьма полезная вещь.
Например, есть объект поля ввода. Стандартное обращение к нему: window.document.forms[0].textFieldName. И так нужно было бы писАть каждый раз, когда необходимо обратиться к полю ввода, но однако ж можно построить указатель на объект (с коротким именем) и использовать его вместо этой длинной записи. Да и к дисциплине приучает, чтобы программисты не разбрасывались объектами, создавая кучу экземпляров одного и того же.
PM   Вверх
bars80080
Дата 14.9.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



нет, одно дело объекты DOM, совсем другое переменные и как их разновидность - массивы. тут совершенно не понятно зачем потребовалось делать такой функционал.


Цитата(Amphiluke @  14.9.2009,  15:20 Найти цитируемый пост)
Да и к дисциплине приучает, чтобы программисты не разбрасывались объектами, создавая кучу экземпляров одного и того же. 

совершенно не приучает. горе-специалисты просто не обращают внимание и пишут часто такие конструкции:
for(i = 0; i < arr.length; i++)
а если вместо arr - какой-нибудь элемент в структуре страницы, скажем набор options в селекте, то получается, на каждой итерации интерпретатор вытягивает этот элемент и считает количество потомков


имхо, очередной выкрутас js, в духе, не как у людей
PM MAIL WWW   Вверх
Amphiluke
Дата 14.9.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



bars80080, с вашего позволения останусь при своем мнении. Массивы, строки, числа, функции, элементы DOM — всё объекты. На мой взгляд, стандартизированный объектный подход — неоспоримое достоинство JavaScript. Если сразу приучать себя мыслить с позиций ООП, то проблем станет меньше. Но, дабы не начинать оффтоп, замолкаю, оставаясь, повторю, на своей старой позиции.  smile 
PM   Вверх
SneG0K
Дата 14.9.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



bars80080, в PHP так-же.

Добавлено @ 18:26
Цитата(bars80080 @  14.9.2009,  16:55 Найти цитируемый пост)
переменные

Переменных в js нет, есть объекты.

Это сообщение отредактировал(а) SneG0K - 14.9.2009, 18:26
PM WWW Skype   Вверх
bars80080
Дата 14.9.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(Amphiluke @  14.9.2009,  18:10 Найти цитируемый пост)
вашего позволения останусь при своем мнении

не позволяю.

а мы спорим?



Цитата(Amphiluke @  14.9.2009,  18:10 Найти цитируемый пост)
стандартизированный объектный подход — неоспоримое достоинство JavaScript. Если сразу приучать себя мыслить с позиций ООП

я б согласился, если бы в js имели место соблюдения стандартов, а подобная практика была широко распространена в других языках (а в тех что я кошеварю, я не встречал подобного)


Цитата(SneG0K @  14.9.2009,  18:15 Найти цитируемый пост)
Переменных в js нет, есть объекты.

на переменные в js, данное объектное правило АФАИК свойственное только js, не распространяется:

Код

<html><body>
<script>
var a = 0, b = 0;
b = 2;
a = b;
b = 1000;
alert(a);
</script>
</body></html>


и в пхп я такого даже близко не видел:

Код

<?php
$a = Array(); $b = Array();
$b = array(1, 2, 3);
$a = $b;
$b[1] = 1000;
echo $a[1];
?>

PM MAIL WWW   Вверх
Amphiluke
Дата 14.9.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(bars80080)

не позволяю.

 smile   smile 

Просто создатели JavaScript пытались, видимо, выполнить за разработчиков сценариев бóльшую часть «грязной» работы и скрыли за «кулисами» часть низкоуровневых операций с указателями. Для языка уровня PHP работу с указателями надо производить явно (наверное, что-то типа $a = &$b, насколько мне позволяют думать скромные познания в PHP)...
Хотя это мне не очень нравится, что PHP позволяет вот так просто создавать копию экземпляра объекта. Что если я создам здоровый класс с конструктором, который выполняет сложные манипуляции по инициализации объекта-экземпляра класса, затем добросовестно вызову конструктор для $b. А потом я просто возьму и присвою «левой» переменной $a переменную $b и буду использовать атрибуты и методы так, как будто $a была инициализирована конструктором. И что, PHP справится с возложенной на него задачей правильной инициализации в таком случае? В «серьезных» компилируемых языках программирования это вызвало бы ошибку.

Это сообщение отредактировал(а) Amphiluke - 14.9.2009, 21:17
PM   Вверх
bars80080
Дата 14.9.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



Цитата(Amphiluke @  14.9.2009,  21:16 Найти цитируемый пост)
А потом я просто возьму и присвою «левой» переменной $a переменную $b и буду использовать атрибуты и методы так, как будто $a была инициализирована конструктором

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

собсна, невнимательность я отношу именно к таким синтаксическим ошибкам, а вот передача чего-то конкретной переменной, это я уж не знаю. всё-таки, когда пишешь есть представление с чем ты обращаешься
PM MAIL WWW   Вверх
IDVsbruck
Дата 14.9.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Амфилук, ты совершенно прав. Не понимаю, к чему цепляется барс, но согласен, что уделяя больше внимания глобальным вопросам и правильному построению структуры, подходов и придерживания принципов, в дальнейшем экономится уйма времени и сил.
PM MAIL   Вверх
bars80080
Дата 15.9.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



ну вот, я оказывается цепляюсь.

я удивляюсь. представьте, вы заглядываете в моторный отсек, а там вместо двигателя - хомячки в колёсиках бегают

но не очень, так как javascript известен своими выходками
PM MAIL WWW   Вверх
SneG0K
Дата 15.9.2009, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



bars80080, 
Код

<?php

class a {
    var $a;
}

$a = new a;
$a->a = 1000;
$b = $a;
$a->a = 1;
echo $b->a;

?>

Мы говорим об объектах.
PM WWW Skype   Вверх
bars80080
Дата 15.9.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



а я говорю о массивах. и раз я топикстартер, то мы тоже говорим о массивах
PM MAIL WWW   Вверх
diadiavova
Дата 15.9.2009, 10:46 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Цитата(bars80080 @  14.9.2009,  21:02 Найти цитируемый пост)
я б согласился, если бы в js имели место соблюдения стандартов, а подобная практика была широко распространена в других языках (а в тех что я кошеварю, я не встречал подобного)

На сколько мне известно, в ООП-языках массивы являются объектами ссылочного типа. Поэтому, для общего развития интересуюсь: о каких языках речь? Потому что я не встречал обратного, чтобы массивы вот так вот бесконтрольно клонировались. А на счёт js ты зря - язык по своему очень интересный smile 



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.