Я создал ashx страницу, которая собирается служить мне XML-документ, полный информации о рядовом пользователе. Я не уверен, который является лучшим способом пойти о создании и заполнении моего пользовательского объекта JavaScript. Я видел их созданный двумя способами:
function User() {
this.Id;
this.FirstName;
this.LastName;
this.Title;
}
и
var User2 = {
Id: null,
FirstName: null,
LastName: null,
Title: null
}
Я мог заполнить каждый из них путем выполнения чего-то как:
//first object
User.Id = 1
//second object
User2.FirstName = 'John'
Действительно ли один метод создания является объектом лучше, чем другой?
Править: Полтора года спустя я видел, что этот вопрос получил популярный значок, таким образом, я просто хотел упомянуть, что сегодня я использую шаблон модуля Crockford.
Вы не можете получить доступ к свойствам первого объекта без создания экземпляра, то есть с использованием ключевого слова new
:
var myUser = new User() ;
document.write(myUser.id) ;
Второй объект - это литерал объекта, который доступен без создания экземпляра, поскольку он уже создан при синтаксическом анализе.
Разница вступает в игру, если вы хотите использовать прототипное наследование
для создания нового объекта на основе старого. Написание литерала объекта, вероятно, проще для понимания и является более подходящим шаблоном, если у вас довольно компактная кодовая база. Тем не менее, прототипирование пригодится, если вы хотите создать новый объект путем дополнения существующего объекта другим объектом без необходимости переписывать расширяемый объект:
ipUser.prototype = User ;
ipUser.ip = "128.0.0.1" ;
В вашем случае эта разница может показаться незначительной, но вы должны представить себе, как Вы получите много избыточного кода, если создадите еще один литерал объекта для каждого скудного дополнения к исходному объекту.
Загляните на страницу Центра разработчиков Mozilla , посвященную объектам JavaScript, если у вас есть дополнительные вопросы, они изложены довольно хорошо: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects : Объект .
Hth
Вам не нужно сначала создавать объект с пустыми значениями. JavaScript не нуждается в держателях и может добавлять свойства и методы динамически в любое время. То есть, этого тоже будет достаточно:
var User2 = {};
User2.Id = 1;
User2.FirstName = 'John';
//...Etc.
Если вас интересует только хранение данных, я бы использовал эту форму (литерал объекта, т.е. ваш второй метод).
Обновление: Вы также можете сделать все немного проще и создать функцию, которая создает пользовательские объекты для вас:
function createUser(id, firstname, lastname, title) {
return {
Id: id,
FirstName: firstname,
LastName: lastname,
Title: title
};
}
var User2 = createUser(1, 'John', 'Smith', 'Manager');
Первый - типичный объект, известный из ООП. Вы можете добавить функции для работы с атрибутами следующим образом (предполагается, что есть функция getFullName):
var u = new User();
u.getFullName();
Второй - просто ассоциативный массив, в котором строки отображаются на значения.
В JavaScript граница между этими двумя понятиями не такая строгая, как в других языках программирования.