Página principal » Codificación » JavaScript orientado a objetos (OOJS) 3 formas de crear instancias de objetos

    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 newTargetEl prototipo (para ser exactos, es el prototipo de newTargetconstructor) 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 segundoEl 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.