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.

Por qué agregar una nueva propiedad al prototipo es diferente de reemplazar el objeto prototipo en JavaScript.

Si tengo una función de constructor de JavaScript:

function Foo() {}
Foo.prototype.bar = 123

Ahora creo un nuevo objeto a partir de Foo y cambio la propiedad bar en el objeto prototipo.

const foo = new Foo()
Foo.prototype.bar = 321
console.log(foo.bar) // 321

Pero si reemplazo Foo.prototype con un objeto como este:

const foo = new Foo()
Foo.prototype = { bar: 321 }
console.log(foo.bar) // 123

¿Por qué la salida de los dos fragmentos de código es diferente?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cuando se crea un nuevo objeto a partir de una función constructora, el objeto heredará propiedades del objeto prototipo de la función constructora. En el primer fragmento de código, se crea un nuevo objeto foo a partir de la función constructora Foo y luego se cambia la propiedad bar en el objeto prototipo de 123 a 321. Dado que foo heredó la propiedad bar del objeto prototipo, la salida de console.log(foo.bar) será 321.

    Sin embargo, en el segundo fragmento de código, se crea un nuevo objeto foo a partir de la función constructora Foo y luego se reemplaza todo el objeto prototipo con un nuevo objeto que tiene una propiedad bar establecida en 321. Dado que foo ya ha heredado del antiguo objeto prototipo, cambiar el objeto prototipo no afecta a foo y aún tiene la propiedad bar del antiguo objeto prototipo, que es 123. Por lo tanto, la salida de console.log(foo.bar) será 123.

Comments are closed.