2010-05-10 11 views
7

He creado una página de ashx que me va a servir un documento XML lleno de información básica del usuario. No estoy seguro de cuál es la mejor manera de crear y completar mi objeto javascript personalizado. Los he visto crear de dos formas:Crear/rellenar el objeto personalizado de Javascript

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

y

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

pude pueblan cada una de ellas haciendo algo como:

//first object 
User.Id = 1 

//second object 
User2.FirstName = 'John' 

es un método para crear el objeto mejor que el otro?

Editar: Un año y medio más tarde vi que esta cuestión tiene la insignia popular, así que sólo quería hablar de que hoy estoy usando Crockford module pattern.

Respuesta

8

no puede acceder a las propiedades del primer objeto y sin creación de instancias, es decir, usando la palabra clave new:

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

El segundo objeto es un objeto literal que es accesible sin necesidad de instancias como ya se instancia cuando lo analiza.

La diferencia entra en juego si desea usar prototypical inheritance para crear un nuevo objeto sobre la base del antiguo. Escribir un objeto literal es probablemente más fácil de entender y el patrón más apropiado si tiene una base de código bastante compacta. Sin embargo, la creación de prototipos es útil si desea crear un nuevo objeto mediante el aumento de un objeto existente con otro objeto sin tener que volver a escribir el objeto conseguir aumentada:

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

En su caso esta diferencia puede no parecer sorprendente, pero tiene que imaginarse cuánto código redundante obtendría si creara otro literal de objeto para cada pequeña adición al objeto original.

Busque en la página del Centro de Desarrolladores de Mozilla en los Objetos de JavaScript si tiene más preguntas, se describe bastante bien: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Object.

HTH

1

El primero es un objeto típico, conocido de OOP. Se pueden añadir funciones para actuar sobre los atributos de este tipo (suponiendo que es una función getFullName):

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

el segundo es simplemente una matriz asociativa, en el que las cadenas se asignan a los valores.

En JavaScript, el límite entre los dos no es tan estricto como en los lenguajes de programación de ohter.

+2

No es una matriz asociativa, es un objeto literal – Bob

5

Usted no tiene que crear un objeto con valores vacíos en primer lugar. JavaScript no necesita marcadores de posición y puede agregar propiedades y métodos dinámicamente en cualquier momento. Es decir, este sería suficiente, así:

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

Si no eres más que preocupados por el almacenamiento de datos que haría uso de este formulario (el objeto literal, es decir, el segundo método.).

Actualización: También podría hacer las cosas un poco más fáciles y crear una función que crea objetos de usuario para usted:

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