es.hideout-lastation.com
Paraíso Para Los Diseñadores Y Desarrolladores


JavaScript orientado a objetos (OOJS): 3 formas de crear instancias de objetos

Cuando un lenguaje de programación tiene que ver con objetos, lo primero que debemos aprender es cómo crear objetos . Crear objetos en JavaScript es bastante fácil: un par de llaves funcionará, sin embargo, esa no es la única forma de crear un objeto ni la única forma que alguna vez necesitará usar.

En JavaScript, las instancias de objetos se crean a partir de objetos integrados y se hacen realidad cuando el programa se está ejecutando. Por ejemplo, Date es un objeto incorporado que nos brinda información sobre las fechas. Si queremos mostrar la fecha actual en una página, necesitamos una instancia de tiempo de ejecución de Date que contenga la información sobre la fecha actual.

JavaScript también nos permite definir nuestros propios objetos que pueden producir sus propias instancias de objeto en tiempo de ejecución. En JavaScript, todo es un objeto y cada objeto tiene un ancestro final llamado Object . La creación de una instancia de objeto se llama instanciación .

1. El new operador

Uno de los métodos más comunes y más conocidos para crear una nueva instancia de objeto es mediante el uso del new operador .

Necesita un constructor para que el new operador funcione. Un constructor es un método de un objeto que reúne una nueva instancia de ese objeto . Su sintaxis básica se ve así:

 nuevo constructor () 

Un constructor puede aceptar argumentos que pueden usarse para cambiar o agregar propiedades a la instancia de objeto que construye. El constructor tiene el mismo nombre que el objeto al que pertenece.

Aquí hay un ejemplo de cómo crear una instancia del objeto Date() con la new palabra clave:

 dt = new Fecha (2017, 0, 1) console.log (dt) // dom 01 ene 2017 00:00:00 GMT + 0100 

Date() es el constructor para crear un nuevo objeto Date . Diferentes constructores para un objeto toman diferentes argumentos para crear el mismo tipo de instancias de objeto con atributos variados .

No todos los objetos incorporados en JavaScript se pueden instanciar como Date . Hay objetos que no vienen con un constructor : Math, JSON y Reflect, pero siguen siendo objetos comunes.

Entre los objetos incorporados que tienen constructor (es), Symbol no se puede llamar en el estilo del constructor para instanciar una nueva instancia de Symbol . Solo se puede llamar como una función que devuelve un nuevo valor de Symbol .

Además, entre los objetos incorporados que tienen constructor (es), no todos necesitan que sus constructores sean llamados con el new operador para ser instanciados. Function, Array, Error y RegExp también se pueden llamar como funciones, sin usar la new palabra clave, y crearán una instancia y devolverán una nueva instancia de objeto.

2. El objeto Reflect

Los programadores de back-end ya pueden estar familiarizados con Reflection APIs . La reflexión es una característica de los lenguajes de programación para inspeccionar y actualizar algunas de las entidades básicas, como objetos y clases, en tiempo de ejecución .

En JavaScript, ya puedes realizar algunas operaciones de reflexión usando Object . Pero, una API Reflection adecuada llegó a existir en JavaScript también.

El objeto Reflect tiene un conjunto de métodos para crear y actualizar instancias de objetos . El objeto Reflect no tiene un constructor, por lo que no se puede crear una instancia con el new operador y, al igual que Math y JSON, tampoco se puede llamar como una función .

Sin embargo, Reflect tiene un equivalente del new operador : el método Reflect.construct() .

 Reflect.construct (target, argumentsList [, newTarget]) 

Tanto el target como el argumento opcional de newTarget son objetos que tienen sus propios constructores, mientras argumentsList es una lista de argumentos para pasar al constructor del target .

 var dt = Reflect.construct (Date, [2017, 0, 1]); console.log (dt); // dom 01 ene 2017 00:00:00 GMT + 0100 

El código anterior tiene el mismo efecto que crear una instancia de Date() usando el new operador. Aunque todavía puede usar new, Reflection es un estándar ECMAScript 6 . También le permite utilizar el argumento newTarget, que es otra ventaja sobre el new operador.

El valor del newTarget de newTarget (para ser exactos, es el prototipo del newTarget de newTarget ) se convierte en el prototipo de la instancia recién creada .

Un prototipo es propiedad de un Objeto, cuyo valor también es un objeto, que lleva las propiedades del objeto original. En resumen, un objeto obtiene sus miembros de su prototipo.

Aquí, veamos un ejemplo:

 clase A {constructor () {this.message = function () {console.log ('mensaje de A')}}} clase B {constructor () {} mensaje () {console.log ('mensaje de B') } data () {console.log ('data from B')}} obj = Reflect.construct (A, [], B) console.log (obj.message ()); // mensaje de A console.log (obj.data ()); // datos de B console.log (obj instanceof B) // true 

Al pasar B como el tercer argumento para Reflect.construct(), el valor prototipo del objeto obj se hace para ser igual que el prototipo del constructor de B (que tiene el message propiedades y los data ).

Por lo tanto, obj puede acceder al message y a los data, disponibles en su prototipo. Pero, como obj se hace usando A, también tiene su propio message que recibió de A

Aunque obj se construye como una matriz, no es una instancia de Array, porque su prototipo se establece en Object .

 obj = Reflect.construct (Array, [1, 2, 3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // falso 

Reflect.construct() puede ser útil cuando desee crear un objeto utilizando más de un modelo .

3. El método Object.create()

También puede crear un nuevo objeto ordinario con un prototipo específico a través de Object.create() . Esto también puede parecer muy similar al uso del new operador, pero no lo es.

 Object.create (O [, propertiesObject]) 

El argumento O es un objeto que sirve al prototipo del nuevo objeto que se creará. El argumento opcional propertiesObject es una lista de propiedades que quizás desee agregar al nuevo objeto.

 clase A {constructor () {} mensaje () {consola.log ('mensaje de A')}} var obj = Object.create (nuevo A (), {data: {escribible: verdadero, configurable: verdadero, valor: function () {return 'data from obj'}}}) console.log (obj.message ()) // mensaje de A console.log (obj.data ()) // datos de obj obj1 = Object.create ( nuevo A (), {foo: {escribible: verdadero, configurable: verdadero, valor: función () {return 'foo de obj1'}}}) console.log (obj1.message ()) // mensaje de una consola. log (obj1.foo ()) // foo de obj1 

En el objeto obj, la propiedad añadida es data, mientras que en obj1, es foo . Entonces, como puede ver, podemos tener propiedades y métodos agregados a un nuevo objeto .

Esto es excelente cuando desea crear varios objetos del mismo tipo pero con diferentes propiedades o métodos adicionales . La sintaxis Object.create() ahorra el problema de codificar todos ellos por separado.

10 asombrosos reemplazos protésicos que nos hacen parte del hombre, parte de la máquina

10 asombrosos reemplazos protésicos que nos hacen parte del hombre, parte de la máquina

Aimee Mullins nació con una condición que requirió la amputación de sus piernas debajo de la rodilla a una edad temprana. Sin embargo, esto no le impidió convertirse en un atleta de clase mundial en atletismo, representando a Estados Unidos en los Juegos Paralímpicos de 1996, con la ayuda de prótesis. Aimee

(Consejos de tecnología y diseño)

10 diseños únicos de naipes que preferirías conservar que jugar

10 diseños únicos de naipes que preferirías conservar que jugar

De acuerdo con Wikipedia, los juegos de cartas han existido desde hace más de 1.100 años. Han cambiado considerablemente desde entonces. Se han creado diferentes variaciones de mazos, pero lo que reconocemos como un "mazo de cartas regular" no ha cambiado mucho por un tiempo. ¡Al menos eso es lo que podrías pensar! Ha

(Consejos de tecnología y diseño)