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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование ссылок для манипуляции данными 
V
    Опции темы
dеluxe
Дата 16.8.2010, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: 1
Всего: 2



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

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

или как массив totals получил ссылку на массив тоже не понятно smile 
Пример из книги
Код

// Здесь создается объект, который соответствует дате Рождества в 2007 году
// Переменная xmas хранит ссылку на объект, а не сам объект
var xmas = new Date(2007, 11, 25);
// Затем выполняется копирование ссылки, получается вторая ссылка на оригинальный объект
var solstice = xmas; // Обе переменные ссылаются на тот же самый объект
// Здесь выполняется изменение объекта с помощью новой ссылки
solstice.setDate(21);
// Изменения можно наблюдать при использовании первой ссылки
xmas.getDate( ); // Возвращает 21, а не первоначальное значение 25
// То же происходит при передаче объектов и массивов в функции.
// Следующая функция складывает значения всех элементов массива.
// Функции передается ссылка на массив, а не копия массива.
// Благодаря этому функция может изменять содержимое массива, переданного
// по ссылке, и эти изменения будут видны после возврата из функции.
function add_to_totals(totals, x)
{
    totals[0] = totals[0] + x;
    totals[1] = totals[1] + x;
    totals[2] = totals[2] + x;
}


например в C есть операция взятия адреса &, ставишь когда нужно получить ссылку или при передачи в функц. достаточно void fun(&value){} получу еще одну ссылку на данные, только в прототипе указать ссылочный параметр, все к тому что наглядно видно что делаем... даже если сравнить по этому случаю не видно как можно сделать тоже самое, передать простую переименую число например по ссылке в js(

такой же пример только с копиями переменными из книги
Код

// Первой рассматривается операция копирования по значению
var n = 1;   // Переменная n хранит значение 1
var m = n;   // Копирование по значению: переменная m хранит другое значение 1
// Данная функция используется для иллюстрации операции передачи величины по значению
// Как вы увидите, функция работает не совсем так, как хотелось бы
function add_to_total(total, x)
{
    total = total + x; // Эта строка изменяет лишь внутреннюю копию total
}
// Теперь производится обращение к функции, которой передаются по значению числа,
// содержащиеся в переменных n и m. Копия значения из переменной n внутри функции
// доступна под именем total. Функция складывает копии значений переменных m и n,


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

 
PM MAIL   Вверх
IDVsbruck
Дата 16.8.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну, язык js сложно сравнивать с высокоуровневыми языками - все-таки надо учитывать специфику, да и мультиплатформенность js накладывает отпечаток.

Что касается рассмотренного вопроса - его я так и не увидел. Что имеется в виду? Зачем столько воды?
Хотя можно и попытаться сформулировать его для себя ... 
1. В js все есть объект;
2. Применение операторов. "=" - есть не только равенство, но и оператор назначения, в отношении объектов это передача ссылки на объект;
однако "+" работает только со скалярами (если отвлечься от стрингов).
Соответственно "... = ... + ..." есть вычисление над скалярной величиной, получение результата и передача ссылки на объект результата.
Что не понятно ТС - мне не совсем ясно.
PM MAIL   Вверх
EmilRegis
Дата 16.8.2010, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 4



PM MAIL   Вверх
dеluxe
Дата 16.8.2010, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: 1
Всего: 2



благодарю, немного понятней стало

IDVsbruck, хорошо если не понятно написал... можете тогда сделать следующее...
Напишите мне пожалуйста пример как получить ссылку простой переменой базового типа var y = 10; Или просто передать эту переменную в функцию по ссылке.


EmilRegis, если честно думал это делается проще как то, с использование какого то оператора...  smile  ,  а для массивов тоже есть что-то подобное?  



Это сообщение отредактировал(а) dеluxe - 16.8.2010, 06:51
PM MAIL   Вверх
dеluxe
Дата 16.8.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: 1
Всего: 2



нашел хорошую тему по ссылкам, вычитал что-то новое http://javascript.ru/forum/misc/11148-ssyl...ateli-v-js.html может кому то тоже пригодится smile 

спасиб вам за помощь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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