es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operación de propiedades de prototipo en JavaScript.

Quiero añadir un parámetro de prototipo a un objeto de JavaScript que devuelva la suma de otros parámetros.

¿Por qué esto funciona?:

function Item() {
    this.a = 2;
    this.b = 3;
    this.c = this.a + this.b;
}

let it = new Item();
console.log(it.c); //5

¿Y esto no funciona?:

function Item() {
    this.a = 2;
    this.b = 3;
}
Item.prototype.c = this.a + this.b;
console.log(it.c); // Nan

¿Cómo acceder a una propiedad para poder hacer operaciones en las propiedades de los prototipos?

¿O siempre debo declararlo en el constructor del objeto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual el primer bloque de código funciona es porque el parámetro c se declara y calcula dentro de la función constructora Item(), lo que significa que cada vez que se crea una nueva instancia de Item, el parámetro c se calcula y se asigna basado en los valores de a y b. Esto permite que it.c genere correctamente la suma de a y b, que es 5.

    Por otro lado, en el segundo bloque de código, el parámetro c se establece como una propiedad del objeto prototipo Item, fuera de la función constructora. En este punto, this se refiere al objeto global y no a la instancia de Item. Por lo tanto, this.a y this.b son ambos undefined, lo que resulta en NaN cuando se llama a it.c.

    Para poder acceder a las propiedades en el prototipo y realizar operaciones sobre ellas, puedes utilizar la palabra clave this dentro de la función constructora, que se refiere a la instancia de Item. Por ejemplo:

     function Item() {
         this.a = 2;
         this.b = 3;
     }
     Item.prototype.c = function() {
         return this.a + this.b;
     }
    
     let it = new Item();
     console.log(it.c()); // 5
    

    Al definir c como una función en el prototipo, podemos acceder a los valores de a y b utilizando this dentro de la función, lo que devuelve correctamente la suma. De esta forma, podemos realizar operaciones en los valores de las propiedades del prototipo.

    En última instancia, si necesitas o no declarar propiedades dentro del constructor depende de tu caso de uso específico. Si la propiedad es específica de cada instancia del objeto, debe ser declarada en el constructor. Si la propiedad es compartida entre todas las instancias del objeto, puede ser declarada en el prototipo.

Comments are closed.