Создание/заполнение пользовательского объекта JavaScript

Я создал 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.

7
задан Justin Helgerson 17 January 2012 в 15:03
поделиться

3 ответа

Вы не можете получить доступ к свойствам первого объекта без создания экземпляра, то есть с использованием ключевого слова 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

8
ответ дан 6 December 2019 в 12:46
поделиться

Вам не нужно сначала создавать объект с пустыми значениями. 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');
7
ответ дан 6 December 2019 в 12:46
поделиться

Первый - типичный объект, известный из ООП. Вы можете добавить функции для работы с атрибутами следующим образом (предполагается, что есть функция getFullName):

var u = new User();
u.getFullName();

Второй - просто ассоциативный массив, в котором строки отображаются на значения.

В JavaScript граница между этими двумя понятиями не такая строгая, как в других языках программирования.

1
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: