Страница 1 из 1

Как работает знак равенства???

Добавлено: 06 янв 2007, 17:54
Timofey
Выкладываю только часть функции, т.к. в этой части непонятки. Объясните мне почему меняется значение dat так же как и dat1? (звёздочки, которые находятся в коде я поставил, чтобы обозначить сноски, в реальном коде их нет)
Строку (*2) я добаил, чтобы посмотреть почему у меня не так работает оператор if (*3) и был неприятно удивлён. Оказывается dat1 и dat имеют одинаковые значения, а я ведь меняю только значение dat1. То что он правильно или неправильно сравнивает даты это другой вопрос, который я задал в предыдущем топике, но неужели равенство (*1) начисто уравнивает переменные?

dat = new Date();
day = dat.getDay();
if (day == 0)
day = 7;
day = day - 1;
dat1 = dat; ***************************(1)
dat1.setDate(dat1.getDate() - day);
tab_1 = new Array();
tab_2 = new Array();
for (var indR=0; indR<30; indR++){
tab_1[indR] = new Array();
tab_2[indR] = new Array();
for (var indC=0; indC<7; indC++){
tab_1[indR][indC] = dat1.getDate();
document.write(dat1 +"
"+ dat+"
"); *******(2)
if (dat1 < dat){ ******************************(3)
tab_2[indR][indC] = 1;}
else {
if (dat1.getDay()==0 || dat1.getDay()==6){
tab_2[indR][indC] = 2;}
}
dat1.setDate(dat1.getDate()+1);
}
}

Re: Как работает знак равенства???

Добавлено: 07 янв 2007, 09:03
Timofey
Ну, что ж... раз никто не смог подсказать мне пришлось домыслить самому и рассказать другим.
Просидев ещё несколько часов над скриптом, иногда безрезультатно заглядывая в книгу. Как я понял равенством (*1) объекты уравниваются и становятся не различимы (глюк конечно! как же программировать, если нельзя зафиксировать состояние объекта простым равенством!). Вышел из ситуации заменой в строке (*1):
dat1 = dat; на dat1 = new Date();
Теперь они стали разными объектами и можно работать с каждым отдельно. Вот так то...

Re: Как работает знак равенства???

Добавлено: 09 янв 2007, 14:54
Timofey
Кстати, может кто-нибудь дать разумное объяснение тому, что объекты и их свойства становятся зависимы друг от друга при приравнивании одного к другому?
Почему не сделать так, что при знаке равенства свойства одного объекта переносятся на другой, но в дальнейшем не зависят друг от друга?

Re: Как работает знак равенства???

Добавлено: 09 янв 2007, 16:57
Хыиуду
Скорее всего, в этом языке (понятия не имею, что это за язык, но мыслить структурно это не мешает), здесь идет присваивание не объектов, а указателей на них. Так что
dat1 = new Date(); - это "сделать переменную dat1 указателем на новый объект типа Date"
dat1 = dat; - "сделать переменную dat1 указателем на тот же самый объект, на который указывает dat"
А "почему бы не сделать..." - это уже спрашивай непосредственно у Страуструпа. С него, если не ошибаюсь, пошла мода на передачу по адресу?

Re: Как работает знак равенства???

Добавлено: 09 янв 2007, 17:30
Absurd
Хыиуду писал(а):А "почему бы не сделать..." - это уже спрашивай непосредственно у Страуструпа. С него, если не ошибаюсь, пошла мода на передачу по адресу?
А как надо было сделать? Кроме того, в С++ можно передавать по значеию, если есть желание. Передача объектов всегда по ссылке - Это к Джеймсу Гослингу тогда уж.
Кстати, может кто-нибудь дать разумное объяснение тому, что объекты и их свойства становятся зависимы друг от друга при приравнивании одного к другому?
Пользуйся конструктором копирования Date date2 = new Date(date1);

Re: Как работает знак равенства???

Добавлено: 10 янв 2007, 14:04
Timofey
Absurd, спасибо за совет. копирование даёт нужный результат.