2010-05-10 4 views
7

J'ai créé une page ashx qui va me servir un document XML rempli d'informations de base sur l'utilisateur. Je ne sais pas quel est le meilleur moyen de créer et de remplir mon objet javascript personnalisé. Je les ai vu créées de deux façons:Création/remplissage d'un objet personnalisé Javascript

function User() { 
    this.Id; 
    this.FirstName; 
    this.LastName; 
    this.Title; 
} 

et

var User2 = { 
    Id: null, 
    FirstName: null, 
    LastName: null, 
    Title: null 
} 

Je pourrais remplir chacun d'entre eux en faisant quelque chose comme:

//first object 
User.Id = 1 

//second object 
User2.FirstName = 'John' 

est une méthode de création de l'objet mieux que l'autre?

Modifier: Un an et demi plus tard, j'ai vu que cette question a l'insigne populaire, donc je voulais simplement mentionner que, aujourd'hui, je me sers de module pattern Crockford.

Répondre

8

Vous ne pouvez pas accéder à la première propriétés de l'objet sans instanciation, à savoir en utilisant le mot-clé new:

var myUser = new User() ; 
document.write(myUser.id) ; 

Le second objet est un objet littéral qui est accessible sans instanciation car il est déjà instancié lorsque analysé.

La différence entre en jeu si vous souhaitez utiliser prototypical inheritance pour créer un nouvel objet à partir de l'ancien. Ecrire un littéral d'objet est probablement plus facile à comprendre et le modèle le plus approprié si vous avez une base de code plutôt compacte. Cependant, le prototypage est très pratique si vous voulez créer un nouvel objet en augmentant un objet existant avec un autre objet, sans avoir à réécrire l'objet s'augmentée:

ipUser.prototype = User ; 
ipUser.ip = "128.0.0.1" ; 

Dans votre cas, cette différence peut ne pas sembler frappante, mais vous Vous devez imaginer combien de code redondant vous obtiendriez si vous créiez un autre objet littéral pour chaque addition maigre à l'objet original.

Regardez dans le Mozilla Developer Center's page sur JavaScript Objets si vous avez des questions supplémentaires, il est très bien décrit: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object.

Hth

1

Le premier est un objet typique, connu de la POO. Vous pouvez ajouter des fonctions à agir sur les attributs comme celui-ci (en supposant qu'il existe une fonction getFullName):

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

Le second est juste un tableau associatif, dans lequel les chaînes sont mises en correspondance avec des valeurs.

En JavaScript, la frontière entre les deux n'est pas aussi stricte que dans d'autres langages de programmation.

+2

Il est pas un tableau associé, il est un objet littéral – Bob

5

Vous ne devez pas créer un objet avec des valeurs vides en premier. JavaScript n'a pas besoin de placeholders et peut ajouter dynamiquement des propriétés et des méthodes à tout moment. Autrement dit, cela suffirait ainsi:

var User2 = {}; 
User2.Id = 1; 
User2.FirstName = 'John'; 
//...Etc. 

Si vous êtes juste préoccupé par le stockage de données j'utiliser ce formulaire (l'objet littéral, à savoir votre deuxième méthode.).

Mise à jour: Vous pouvez aussi faire des choses un peu plus facile et créer une fonction qui crée des objets utilisateur pour vous:

function createUser(id, firstname, lastname, title) { 
    return { 
     Id: id, 
     FirstName: firstname, 
     LastName: lastname, 
     Title: title 
    }; 
} 
var User2 = createUser(1, 'John', 'Smith', 'Manager');