Hasta ahora vi tres formas de crear un objeto en JavaScript. ¿Cuál es la mejor manera de crear un objeto y por qué?
También vi que en todos estos ejemplos la palabra clave var
no se usa antes de una propiedad, ¿por qué? ¿No es necesario declarar var
antes del nombre de una propiedad ya que mencionó que las propiedades son variables?
En la segunda y tercera forma, el nombre del objeto está en mayúscula, mientras que en la primera forma el nombre del objeto está en minúscula. ¿Qué caso debemos usar para un nombre de objeto?
Primera forma:
function person(fname, lname, age, eyecolor){
this.firstname = fname;
this.lastname = lname;
this.age = age;
this.eyecolor = eyecolor;
}
myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");
Segunda forma:
var Robot = {
metal: "Titanium",
killAllHumans: function(){
alert("Exterminate!");
}
};
Robot.killAllHumans();
Tercera forma: objetos JavaScript con sintaxis de matriz:
var NewObject = {};
NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }
javascript
object
Jamna
fuente
fuente
var
, por favor .. omitiendo los hace mundialObject.create()
:?Respuestas:
No hay mejor manera, depende de su caso de uso.
Person
(debe comenzar el nombre con una letra mayúscula) se llama función constructora . Esto es similar a las clases en otros idiomas OO.Actualización: como ejemplos solicitados para la tercera vía.
Propiedades dependientes:
Lo siguiente no funciona como
this
no se refierebook
. No hay forma de inicializar una propiedad con valores de otras propiedades en un objeto literal:en cambio, podrías hacer:
Nombres de propiedades dinámicas:
Si el nombre de la propiedad se almacena en alguna variable o se crea mediante alguna expresión, entonces debe usar la notación de corchetes:
fuente
...
para heredar de otro objeto?Hay varias formas de definir una función. Está totalmente basado en su requerimiento. Debajo están los pocos estilos: -
Ejemplos:
Puedes probarlo en la consola, si tienes alguna confusión.
fuente
var person
instancia al final? por ejemplo, en el constructor de funciones, simplemente podría agregarvar person = new Person("Anand")
. ¿Y qué pasa con el uso de punto y coma aparentemente aleatorio? : PNo hay "mejor manera" de crear un objeto. Cada forma tiene beneficios dependiendo de su caso de uso.
El patrón de constructor (una función emparejada con el
new
operador para invocarlo) ofrece la posibilidad de utilizar la herencia prototípica, mientras que las otras formas no lo hacen. Entonces, si desea la herencia de prototipos, entonces una función de constructor es un buen camino a seguir.Sin embargo, si desea una herencia prototípica, también puede usarla
Object.create
, lo que hace que la herencia sea más obvia.Crear un objeto literal (ej .
var obj = {foo: "bar"};
:) funciona muy bien si tiene todas las propiedades que desea establecer a mano en el momento de la creación.Para configurar las propiedades más adelante, la
NewObject.property1
sintaxis generalmente es preferible aNewObject['property1']
si conoce el nombre de la propiedad. Pero este último es útil cuando en realidad no tiene el nombre de la propiedad antes de tiempo (ejNewObject[someStringVar]
.:).¡Espero que esto ayude!
fuente
Supongo que depende de lo que quieras. Para objetos simples, supongo que podría usar los segundos métodos. Cuando tus objetos crecen y planeas usar objetos similares, creo que el primer método sería mejor. De esa manera también puedes extenderlo usando prototipos.
Ejemplo:
No soy un gran admirador del tercer método, pero es realmente útil para editar propiedades dinámicamente, por ejemplo
var foo='bar'; var bar = someObject[foo];
.fuente
Hay muchas formas de crear sus objetos en JavaScript. Usar una función de constructor para crear un objeto o notación literal de objeto es usar mucho en JavaScript. Además de crear una instancia de Object y luego agregarle propiedades y métodos, hay tres formas comunes de crear objetos en JavaScript.
Funciones de constructor
Hay funciones de constructor incorporadas que todos podemos usar de vez en cuando, como Date (), Number (), Boolean (), etc., todas las funciones de constructor comienzan con mayúscula, mientras tanto podemos crear una función de constructor personalizada en JavaScript Me gusta esto:
y puede invocarlo, simplemente usando new (), para crear una nueva instancia del constructor, cree algo como a continuación y llame a la función del constructor con parámetros llenos:
Literales de objeto
El uso de literales de objetos es muy utilizado para crear objetos en JavaScript, este es un ejemplo de creación de un objeto simple, puede asignar cualquier cosa a las propiedades de su objeto siempre que estén definidas:
Prototipos
Después de crear un Objeto, puede crear un prototipo de más miembros para eso, por ejemplo, agregar color a nuestro Cuadro, podemos hacer esto:
fuente
Si bien muchas personas aquí dicen que no hay una mejor manera para la creación de objetos, existe una justificación de por qué hay tantas formas de crear objetos en JavaScript, a partir de 2019, y esto tiene que ver con el progreso de JavaScript en las diferentes iteraciones de los lanzamientos de EcmaScript que datan de 1997.
Antes de ECMAScript 5, solo había dos formas de crear objetos: la función constructora o la notación literal (una mejor alternativa al nuevo Object ()). Con la notación de función de constructor, crea un objeto que se puede instanciar en varias instancias (con la nueva palabra clave), mientras que la notación literal entrega un solo objeto, como un singleton.
Independientemente del método que utilice, los objetos de JavaScript son simplemente propiedades de pares de valores clave:
En las primeras versiones de JavaScript, la única forma real de imitar la herencia basada en clases era usar funciones de constructor. la función constructora es una función especial que se invoca con la palabra clave 'new'. Por convención, el identificador de la función está en mayúscula, aunque no es obligatorio. Dentro del constructor, nos referimos a la palabra clave 'this' para agregar propiedades al objeto que la función constructora está creando implícitamente. La función constructora devuelve implícitamente el nuevo objeto con las propiedades pobladas a la función de llamada implícitamente, a menos que use explícitamente la palabra clave return y devuelva otra cosa.
Hay un problema con el método sayName. Por lo general, en los lenguajes de programación basados en clases orientadas a objetos, se utilizan clases como fábricas para crear objetos. Cada objeto tendrá sus propias variables de instancia, pero tendrá un puntero a los métodos definidos en el plano de la clase. Desafortunadamente, cuando se usa la función constructora de JavaScript, cada vez que se llama, definirá una nueva propiedad sayName en el objeto recién creado. Por lo tanto, cada objeto tendrá su propia propiedad única sayName. Esto consumirá más recursos de memoria.
Además del aumento de los recursos de memoria, la definición de métodos dentro de la función constructora elimina la posibilidad de herencia. Nuevamente, el método se definirá como una propiedad en el objeto recién creado y ningún otro objeto, por lo que la herencia no puede funcionar como. Por lo tanto, JavaScript proporciona la cadena de prototipos como una forma de herencia, haciendo de JavaScript un lenguaje prototípico.
Si tiene un padre y un padre comparte muchas propiedades de un hijo, entonces el hijo debe heredar esas propiedades. Antes de ES5, se logró de la siguiente manera:
La forma en que utilizamos la cadena de prototipos anterior tiene una peculiaridad. Dado que el prototipo es un enlace en vivo, al cambiar la propiedad de un objeto en la cadena del prototipo, también cambiaría la misma propiedad de otro objeto. Obviamente, cambiar el método heredado de un niño no debería cambiar el método de los padres. Object.create resolvió este problema utilizando un polyfill. Por lo tanto, con Object.create, puede modificar de forma segura la propiedad de un niño en la cadena del prototipo sin afectar la misma propiedad del padre en la cadena del prototipo.
ECMAScript 5 introdujo Object.create para resolver el error mencionado anteriormente en la función de constructor para la creación de objetos. El método Object.create () CREA un nuevo objeto, utilizando un objeto existente como prototipo del objeto recién creado. Como se crea un nuevo objeto, ya no tiene el problema de que la modificación de la propiedad secundaria en la cadena prototipo modificará la referencia del padre a esa propiedad en la cadena.
Antes de ES6, aquí había un patrón de creación común para utilizar constructores de funciones y Object.create:
Ahora Object.create junto con las funciones de constructor se han usado ampliamente para la creación y herencia de objetos en JavaScript. Sin embargo, ES6 introdujo el concepto de clases, que son principalmente azúcar sintáctica sobre la herencia basada en prototipos existente de JavaScript. La sintaxis de clase no introduce un nuevo modelo de herencia orientado a objetos a JavaScript. Por lo tanto, JavaScript sigue siendo un lenguaje prototípico.
Las clases de ES6 hacen la herencia mucho más fácil. Ya no tenemos que copiar manualmente las funciones prototipo de la clase principal y restablecer el constructor de la clase secundaria.
Con todo, estas 5 estrategias diferentes de creación de objetos en JavaScript coincidieron con la evolución del estándar EcmaScript.
fuente
En el ejemplo anterior, puede ver que un objeto vacío tiene propiedades.
Ok, primero veamos cuál es la mejor manera:
En el ejemplo anterior, el registro generará falso.
Ahora veamos por qué las otras formas de creación de objetos son incorrectas.
Como puede ver arriba, todos los ejemplos se registran como verdaderos, lo que significa que si tiene un caso, tiene un
for in
bucle para ver si el objeto tiene una propiedad, probablemente lo llevará a resultados incorrectos.Tenga en cuenta que la mejor manera no es fácil. Debe definir todas las propiedades del objeto línea por línea. Las otras formas son más fáciles y tendrán menos código para crear un objeto, pero en algunos casos debe tener en cuenta. Por cierto, siempre uso las "otras formas" y una solución a la advertencia anterior si no usa la mejor manera es:
fuente
Principalmente hay 3 formas de crear objetos:
El más simple está usando literales de objeto .
Aunque este método es el más simple pero tiene una desventaja, es decir, si su objeto tiene un comportamiento (funciones en él), en el futuro, si desea realizar algún cambio, deberá cambiarlo en todos los objetos .
Entonces, en ese caso, es mejor usar las funciones de fábrica o de constructor (cualquiera que le guste)
Las funciones de fábrica son aquellas funciones que devuelven un objeto.
Las funciones de constructor son aquellas funciones que asignan propiedades a los objetos usando "esta" palabra clave.
fuente