2012-06-10 18 views
8

Duplicar posible:
How to “properly” create a custom object in JavaScript?¿Cómo hacer objetos personalizados en Javascript?

Lo siento si esto ha sido respondida antes, pero estoy un poco abrumado por la cantidad de opciones que se ofrecen para estar en lo que se refiere a la creación de objetos personalizados en Javascript . No estoy seguro de sus respectivas fortalezas o debilidades o si difieren o no en absoluto.

Estas son algunas de las diferentes maneras que he encontrado para construir objetos:

1: nuevo objeto

person = new Object() 
person.name = "Tim Scarfe" 
person.height = "6Ft" 

person.run = function() { 
    this.state = "running" 
    this.speed = "4ms^-1" 
} 

2: notación literal de

timObject = { 
    property1 : "Hello", 
    property2 : "MmmMMm", 
    property3 : ["mmm", 2, 3, 6, "kkk"], 
    method1 : function(){alert("Method had been called" + this.property1)} 
}; 

3 : Funciones

function AdBox() { 
    this.width = 200; 
    this.height = 60; 
    this.text = 'default ad text'; 
    this.prototype.move = function() { 
     // code for move method goes here 
    } 
} 
this.prototype.display = function() { 
    // code 
} 

Incluso vi algunas formas más pero parecían menos comunes ... Como puede ver, no estoy exactamente seguro de cuál es el estándar cuando alguien simplemente quiere un objeto simple con campos y métodos.

Gracias por leer.

+1

en su función 'AdBox', debe ser' this.move = function' not 'this.prototype.move = function'. – zzzzBov

+0

@zzzzBov: Sí, acabo de copiar y pegar desde [aquí] (http://javascript.about.com/library/bltut35.htm). Dijeron que podría hacerse de cualquier manera, pero hay diferencias. –

+2

http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript#1598077 – zerkms

Respuesta

1

La primera y la segunda opción son funcionalmente idénticas. La mayoría de los desarrolladores eligen usar la notación literal porque es un poco más corta.

La tercera opción generalmente solo se usa cuando busca crear objetos reutilizables (es decir, herencia). En este caso, la función actúa como un "constructor", que es una función que devuelve una nueva instancia de objeto que puede heredar métodos y propiedades definidos en el prototipo del constructor.

+0

¿Qué parte dice que es una "buena práctica" no usar la palabra clave 'new'? Tendría que estar en desacuerdo con ese consejo. –

+0

Dispara, eres el enlace correcto. Lo actualizaré luego de encontrar el enlace correcto (que simplemente no se usó para * new object() *). Perdón, lo tergiversé en mi comentario original (eliminado). –

Cuestiones relacionadas