Hay diferencia entre hacer: “Hija.prototype = new fn” y hacer “Hija.prototype = fn.prototype” ??

Wilmer Jesús Cuevas Perdomo

Wilmer Jesús Cuevas Perdomo

Pregunta
studenthace 5 años

Hay diferencia entre hacer: “Hija.prototype = new fn” y hacer “Hija.prototype = fn.prototype” ??

9 respuestas
para escribir tu comentario
    Cesar Mora

    Cesar Mora

    studenthace 5 años

    si, existe una gran diferencia como lo dijo @RetaxMaster, creo que el ompañero comento es muy solido y facil de entender pero aun asi quiero dejar un ejemplo:










    imaginate una construccion de un edificio o apartamentos, cuando usas “Hija.prototype = new fn” estas diciendo que el departamento inicial o casa o apto como lo quieras llamar es la base para crear los demas y esa funcion dice que debes crear 100 o 20 o 2 departamentos mas igual a eso, pero sin incluir ciertas cosas como muebles, colores, ropa y demas cosas











    en cambio cuando usas Hija.prototype = fn.prototype” estas diciendo que el promer departamento lo vas a clonar con todo y muebles, ropa y lo que te quieras imaginar en cuanto a estilo y toque personal, por eso es muy importante tener mucho cuidado con este tema

    espero que te haya servido este ejemplo, saludos :)

    Wilmer Jesús Cuevas Perdomo

    Wilmer Jesús Cuevas Perdomo

    studenthace 5 años

    heredar.png

    Es esto nadamás, es literalmente igual que lo que hizo el profe en el curso, la unica diferencia es en lo que muestro en la anterior foto. Básicamente si tuviera que plantear la duda en forma de pregunta, sería:

    1. ¿Un objeto de la función padre es lo mismo que el prototipo de la función padre?

    2. ¿Qué pasa si no quiero usar la función anónima que usábamos como intermediaria, me puede afectar en algo mi programa?

    Nicolás Arias González

    Nicolás Arias González

    studenthace 5 años

    Sí tienes razón. No había visto que estabas asignando los constructores pero, me puedes mostrar la parte donde llamas la función

    heredar
    ? Estás ejecutando manualmente el constructor?

    De todas maneras en programación siempre habrá diferentes formas de lograr un propósito y no siempre hay una opción que claramente es "mejor" que las demás. En casos como este, yo te recomendaría irte con la opción más legible, que a simple vista sea obvio qué es lo que hace tu código.

    Me gusta mucho tu curiosidad y tus ánimos de experimentar. Un saludo!

    Wilmer Jesús Cuevas Perdomo

    Wilmer Jesús Cuevas Perdomo

    studenthace 5 años

    Muchas gracias por tu respuesta, entiendo perfectamente tu punto, sin embargo fíjate bien, no es el mismo ejemplo que yo estoy dando en la foto! en todos tengo en cuenta el constructor también, lo que varía es la forma de asignarle el prototipo del padre.

    Nicolás Arias González

    Nicolás Arias González

    studenthace 5 años

    En la línea 4 debe ser

    this.mayorDeEdad = (edad >= 18);
    para que el ejemplo funcione bien, pero el punto es el mismo.

    Un saludo

    Nicolás Arias González

    Nicolás Arias González

    studenthace 5 años

    Creo que la diferencia más importante entre las opciones que presentas es que si le asignas el prototipo directamente, te saltarías el constructor, donde puede haber operaciones importantes, mira un ejemplo:

    function Persona(nombre, edad) { this.nombre = nombre; this.edad = edad; this.mayorDeEdad = (edad > 18); } Persona.prototype.comprarCerveza = function() { if (this.mayorDeEdad) { console.log('Deliciosa y refrescante cerveza'); } else { console.log(this.name, 'no es mayor de edad, no puede comprar cerveza'); } } const Andrea = new Persona('Andrea', 18); Andrea.comprarCerveza(); // Deliciosa y refrescante cerveza const Bernardo = {}; Bernardo.prototype = Persona.prototype; Bernardo.name = 'Bernardo'; Bernardo.edad = 30; Bernardo.comprarCerveza(); // Bernardo no es mayor de edad, no puede comprar cerveza
    Wilmer Jesús Cuevas Perdomo

    Wilmer Jesús Cuevas Perdomo

    studenthace 5 años

    ¿Cual es la diferencia entre estas tres opciones? Todas me funcionaron correctamente.

    Duda herencia.png

    Wilmer Jesús Cuevas Perdomo

    Wilmer Jesús Cuevas Perdomo

    studenthace 5 años

    Muchas gracias por responder, y ¿qué diferencia habría entre tenerlo como una nueva instancia y copiarlo directamente el mismo prototipo del padre? Yo lo hice de las dos maneras en mi programa y me funcionó igual, por eso es mi duda.

    Carlos Eduardo Gomez García

    Carlos Eduardo Gomez García

    teacherhace 5 años

    Hola, si, al usar "new" estás instanciando la clase "fn", pero esa instancia se está guardando dentro de prototype de Hijo, así que digamos que de cierta manera hay una herencia, si solamente hacer fn.prototype es como copiar los prototypes de la clase padre a la clase hija tal cual

Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.

Fundamentos de JavaScript 2018
Fundamentos de JavaScript 2018

Fundamentos de JavaScript 2018

JavaScript es un lenguaje de programación que se trabaja desde el navegador. Construye programas, conoce el entorno, los condicionales y las estructuras repetitivas. Aprende cuáles son y cómo se declaran las variables y las funciones de JS.