Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.09.2018, 13:54
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Создание копии объекта даты
Всем доброго дня!Ниже приведенная функция возвращает число, которое было days дней назад от date, при этом исходный объект не должен меняться.Так вот функция работает, но мне не понятно, почему при создании копии объекта происходит копирование по значению, а не по ссылке?Ведь по сути в скобках мы указываем ссылку на объект: var dateCopy = new Date(date);
var date = new Date();
alert(getDateAgo(date, 1));
function getDateAgo(date, days) {
   var dateCopy = new Date(date);
   dateCopy.setDate(date.getDate() - days);
   return dateCopy.getDate();
}
alert(date);// исходный объект не изменился!

Объясните пожалуйста в чем я не прав!Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 25.09.2018, 14:22
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

https://developer.mozilla.org/ru/doc...l_Objects/Date

Создаёт экземпляр объекта Date, представляющего собой момент времени.

потом ты говоришь:

Ведь по сути в скобках мы указываем ссылку на объект: var dateCopy = new Date(date);

так новый объект
var dateCopy = new Date(date);

так ссылка
var dateLink = date
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2018, 06:48
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Получается при создании копии объекта происходит копирование по значению переменной date!?
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2018, 07:15
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

AlexanderFilatov,
конструктор каждый раз создает создает новый экземпляр, поэтому
var dateCopy = new Date(date);
dateCopy !== date //true

если нужна ссылка то так
var dateCopy = date;
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2018, 11:52
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

j0hnik, спасибо я понял!
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2018, 13:05
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Сообщение от j0hnik
var dateCopy = new Date(date);
dateCopy !== date //true
Получается здесь сравниваются две ссылки на объект, а так как они имеют разные адреса в памяти, то они не идентичны!Я правильно понял, что при сравнении объектов, сравниваются их ссылки!?То есть они будут равны только тогда, когда имеют один и тот же адрес!
Ответить с цитированием
  #7 (permalink)  
Старый 26.09.2018, 13:10
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

AlexanderFilatov,
да
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2018, 09:10
Интересующийся
Отправить личное сообщение для AlexanderFilatov Посмотреть профиль Найти все сообщения от AlexanderFilatov
 
Регистрация: 14.09.2018
Сообщений: 26

Сообщение от j0hnik
конструктор каждый раз создает создает новый экземпляр
Я так понимаю это не относится к "обычному" объекту, создаваемому через конструктор new Object, так как здесь объекты равны:
var car = {
    model: "focus"
};
var carCopy = new Object(car);
alert(car == carCopy); // true
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2018, 09:54
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Конструктор Object создаёт объект-обёртку для переданного значения. Если значение уже является объектом, конструктор вернёт это значение.
в общем так делать не нужно, это бесполезное действие.
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2018, 11:13
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Да уж, это никак не копия - это один и тот же объект
var car = {
    model: "focus"
};
var carCopy = new Object(car);
alert(carCopy.model); 
carCopy.model = "lexus";
alert(car.model);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание дерева объекта mu_vi Общие вопросы Javascript 4 22.01.2015 11:53
DOM создание объекта JQ ~ вопрос реализации состояния Brook Events/DOM/Window 0 21.01.2014 22:45
Создание объекта. Severtain Общие вопросы Javascript 0 31.03.2012 19:26
Странное создание объекта IceBird Общие вопросы Javascript 3 12.06.2010 05:39
Создание копий объекта - обязателен ли prototype? heh131 Общие вопросы Javascript 12 15.05.2010 12:55