JavaScript orientado a objetos (OOJS) 3 formas de crear instancias de objetos
Cuando un lenguaje de programación es todo sobre objetos, Lo primero que tenemos que aprender es como crear objetos. Crear objetos en JavaScript es bastante fácil: un par de llaves Hará el trabajo, sin embargo, eso es ni la única manera para crear un objeto ni la única manera siempre necesitarás usar.
En JavaScript, las instancias de objeto son creado a partir de objetos incorporados y cobran vida cuando el programa se está ejecutando. Por ejemplo, Fecha
es un objeto incorporado que nos da información sobre las fechas. Si queremos mostrar la fecha actual en una página, necesita una instancia de tiempo de ejecución de Fecha
que lleva la información sobre la fecha actual.
JavaScript también nos permite definir nuestros propios objetos Eso puede producir sus propias instancias de objetos en tiempo de ejecución. En JavaScript, todo es un objeto y cada objeto tiene una último ancestro llamado Objeto
. La creación de una instancia de objeto se llama instanciación.
1. El nuevo
operador
Uno de los métodos más comunes y conocidos para crear una nueva instancia de objeto es mediante utilizando la nuevo
operador.
Tu necesitas un constructor para hacer el nuevo
trabajo del operador Un constructor es un método de un objeto que junta un nueva instancia de ese objeto. Su sintaxis básica se ve así:
nuevo constructor ()
Un constructor puede aceptar argumentos que se puede usar para cambiar o agregar propiedades a la instancia de objeto que construye. El constructor tiene el mismo nombre como el objeto al que pertenece.
Aquí hay un ejemplo de cómo crear un instancia de la Fecha()
objeto con el nuevo
palabra clave:
dt = nueva Fecha (2017, 0, 1) console.log (dt) // Dom Ene 01 2017 00:00:00 GMT + 0100
Fecha()
Es el constructor para crear una nueva. Fecha
objeto. Diferentes constructores para un objeto. toma diferentes argumentos para crear el mismo tipo de instancias de objetos con atributos variados.
No todos los objetos incorporados en JavaScript se pueden instanciar como Fecha
. Hay objetos que no vengas con un constructor: Mates
, JSON
y Reflejar
, pero siguen siendo objetos ordinarios.
Entre los objetos incorporados que tienen constructor (es), Símbolo
no se puede llamar en el estilo constructor para instanciar un nuevo Símbolo
ejemplo. Solo puede ser llamado como una función que devuelve un nuevo Símbolo
valor.
Además, entre los objetos incorporados que tienen constructor (es), no todos necesitan ser llamados a sus constructores con el nuevo
operador para ser instanciado. Función
, Formación
, Error
, y RegExp
También se pueden llamar como funciones., sin usar el nuevo
palabra clave, y crearán una instancia y devolverán una nueva instancia de objeto.
2. El Reflejar
objeto
Los programadores backend pueden estar familiarizados con API de reflexión. 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 podías realizar algunos operaciones de reflexión utilizando Objeto
. Pero, un API de reflexión adecuada Eventualmente llegó a existir en JavaScript también.
los Reflejar
objeto tiene un conjunto de métodos para crear y actualizar instancias de objetos. los Reflejar
objeto no tiene un constructor, por lo que no puede ser instanciado con el nuevo
operador, y, al igual que Mates
y JSON
, eso no puede ser llamado como una función ya sea.
sin embargo, Reflejar
tiene un equivalente a la nuevo
operador: la Reflect.construct ()
método.
Reflect.construct (target, argumentList [, newTarget])
Ambos objetivo
y el opcional newTarget
los argumentos son Objetos que tienen sus propios constructores., mientras lista de argumentos
es un lista de argumentos para ser pasado al constructor de objetivo
.
var dt = Reflect.construct (Fecha, [2017, 0, 1]); console.log (dt); // Dom Ene 01 2017 00:00:00 GMT + 0100
El código de arriba tiene el mismo efecto como instanciación Fecha()
utilizando la nuevo
operador. Aunque todavía puedes usar nuevo
, La reflexión es un Norma ECMAScript 6. También te permite hacer uso de la newTarget
argumento, que es otra ventaja sobre el nuevo
operador.
El valor de newTarget
El prototipo (para ser exactos, es el prototipo de newTarget
constructor) Se convierte en el prototipo de la instancia recién creada..
Un prototipo es el propiedad de un objeto, cuyo valor es también un objeto, llevando las propiedades del objeto original. En resumen, un objeto obtiene a sus miembros de su prototipo..
Aquí, veamos un ejemplo:
clase A constructor () this.message = function () console.log ('mensaje de A') clase B constructor () message () 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
Pasando segundo
como el tercer argumento para Reflect.construct ()
, El valor prototipo de la obj
objeto es hecho para ser igual como el prototipo de segundo
El constructor (que tiene las propiedades mensaje
y datos
).
Así, obj
puede acceder a la mensaje
y datos
, Disponible en su prototipo. Pero desde obj
se hace usando UNA
, también tiene su propio mensaje
eso recibido de UNA
.
Aunque obj
se construye como una matriz, es no es un ejemplo de Formación
, porque su prototipo está configurado para Objeto
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
Puede ser útil cuando quieres crear un objeto. usando más de un plano.
3. El Object.create ()
método
También puedes crear un Nuevo objeto ordinario con un prototipo específico. vía Object.create ()
. Esto, también, puede parecer muy similar a usar el nuevo
operador, pero no es.
Object.create (O [, propertiesObject])
los O
el argumento es un objeto que sirve el prototipo para el nuevo objeto que será creado. El opcional propiedadesObjeto
el argumento es un lista de propiedades es posible que desee agregar al nuevo objeto.
class A constructor () message () console.log ('message from A') var obj = Object.create (new A (), data: writable: true, configurable: true, value: function () return 'data from obj') console.log (obj.message ()) // mensaje de A console.log (obj.data ()) // datos de obj obj1 = Object.create ( new A (), foo: writable: true, configurable: true, value: function () return 'foo from obj1') console.log (obj1.message ()) // mensaje desde una consola log (obj1.foo ()) // foo from obj1
En el obj
objeto, la propiedad añadida es datos
, mientras en obj1
, sus foo
. Así que, como ves, podemos tener Propiedades y métodos añadidos a un nuevo objeto..
Esto es genial cuando quieres crear múltiples objetos del mismo tipo pero con Diferentes propiedades o métodos complementarios.. los Object.create ()
la sintaxis ahorra la molestia de codificarlos todos por separado.