Создание / заполнение пользовательского объекта Javascript - PullRequest
7 голосов
/ 10 мая 2010

Я создал страницу 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'

Один метод создания объекта лучше другого?

Редактировать : Полтора года спустя я увидел, что этот вопрос получил популярный значок, поэтому я просто хотел упомянуть, что сегодня я использую шаблон модуля Крокфорда .

Ответы [ 3 ]

8 голосов
/ 10 мая 2010

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

5 голосов
/ 10 мая 2010

Вам не нужно сначала создавать объект с пустыми значениями. 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');
1 голос
/ 10 мая 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...