2010-05-10 15 views
7

Ho creato una pagina ashx che mi fornirà un documento XML completo di informazioni utente di base. Non sono sicuro di quale sia il modo migliore per creare e popolare il mio oggetto javascript personalizzato. Li ho visti creati in due modi:Creazione/popolamento di oggetti personalizzati Javascript

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

e

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

potevo popolano ognuno di questi facendo qualcosa di simile:

//first object 
User.Id = 1 

//second object 
User2.FirstName = 'John' 

è un metodo di creazione dell'oggetto meglio dell'altro?

Edit: Un anno e mezzo più tardi ho visto che la questione ha ottenuto il distintivo popolare, quindi volevo solo dire che oggi sto usando Crockford di module pattern.

risposta

8

Non è possibile accedere le proprietà del primo oggetto senza istanziazione, cioè utilizzando la parola chiave new:

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

Il secondo oggetto è un oggetto letterale che è accessibile senza istanziazione come è già un'istanza quando analizzato.

La differenza entra in gioco se si desidera utilizzare prototypical inheritance per creare un nuovo oggetto sulla base di quello vecchio. Scrivere un oggetto letterale è probabilmente più facile da capire e il modello più appropriato se si dispone di una base di codice piuttosto compatta. Tuttavia, la prototipazione è utile se si desidera creare un nuovo oggetto aumentando un oggetto esistente con un altro oggetto senza dover riscrivere l'oggetto sempre aumentata:

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

Nel tuo caso questa differenza potrebbe non sembrare sorprendente, ma si devi immaginare quanto codice ridondante si otterrebbe se si creasse un altro oggetto letterale per ogni misera aggiunta all'oggetto originale.

Guardare in Mozilla Developer del Centro pagina su JavaScript Oggetti se hai altre domande, è delineato abbastanza bene: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object.

Hth

1

Il primo è un oggetto tipico, noto da OOP. È possibile aggiungere funzioni di agire sugli attributi come questa (supponendo c'è una funzione getFullName):

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

La seconda è solo un array associativo, in cui le stringhe sono mappate su valori.

In JavaScript il confine tra i due non è rigoroso come nei linguaggi di programmazione ohter.

+2

non è una matrice socio, si tratta di un oggetto letterale – Bob

5

Non è necessario creare un oggetto con valori vuoti prima. JavaScript non ha bisogno di segnaposto e può aggiungere proprietà e metodi in modo dinamico in qualsiasi momento. Cioè, questo sarebbe sufficiente così:

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

Se siete solo preoccupati per la memorizzazione dei dati userei questa forma (l'letterale oggetto, vale a dire il secondo metodo.).

Aggiornamento: Si potrebbe anche fare le cose un po 'più facile e creare una funzione che crea oggetti di utente per voi:

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