Вы не можете получить доступ к свойствам первого объекта без создания экземпляра, то есть с помощью ключевого слова new
:
var myUser = new User() ;
document.write(myUser.id) ;
Второй объект - это литерал объекта, который доступен без создания экземпляра, поскольку он уже создан при разборе.
Разница вступает в игру, если вы хотите использовать prototypical inheritance
для создания нового объекта на основе старого. Написание объектного литерала, вероятно, проще для понимания и более подходящего шаблона, если у вас достаточно компактная кодовая база. Тем не менее, прототипирование пригодится, если вы хотите создать новый объект, дополнив существующий объект другим объектом без необходимости перезаписывать объект, дополняя его:
ipUser.prototype = User ;
ipUser.ip = "128.0.0.1" ;
В вашем случае это различие может показаться не значительным, но вы должны представить, сколько избыточного кода вы получите, если создадите другой литерал объекта для каждого скудного добавления к исходному объекту.
Загляните на страницу Центра разработчиков Mozilla по объектам JavaScript, если у вас есть дополнительные вопросы, они изложены довольно хорошо: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object.
Hth