Estoy intentando que las propiedades hereden de uno de los padres, pero no tengo claro cuál es la forma correcta de hacerlo.Herencia de Prototypal en JS y cómo obtener propiedades principales
Digamos que tengo:
var Animal = function(name){
this.offspring = [];
this.name = name;
return this;
}
Animal.prototype.createOffspring = function(name){
name = name || 'Baby '+(this.offspring.length+1);
this.offspring.push(name);
return this;
}
Ahora quiero añadir un prototipo hereda sub así que no tengo que añadir manualmente todo, desde la matriz. Por ejemplo, digamos que quiero añadir una basada Cat
de Animal
Me gustaría hacer esto, como si se tratara de un Animal
var pet = new Cat('Kitty');
pet.createOffspring();
Sin tener que añadir manualmente name
y createOffspring
al gato constructor
que es realmente solo un Animal
, pero con alguna otra funcionalidad adicional (como .meow()
o algo así).
Necesito probarlo, pero me gustaría _not_ no tener que volver a hacer 'this.name' porque _all_ animals tendrá un nombre, por lo tanto,' this.name = 'A cat'; 'debería poder eliminarse y 'cat.name' debería devolver' An animal' –
Oh, lo siento. Le confundo a la respuesta incorrecta: Animal.prototype no fue configurado, por lo que 'cat.name' daría una excepción. La forma correcta, cuando la instancia se construye dinámicamente, es asignar un objeto a un proto: 'Cat.prototype = Object.create (new Animal())' –
Esto me llevó en la dirección correcta y muchas gracias. Lo siento, tomó tanto tiempo :) Lo único que parece extraño es que 'Cat.prototype.constructor = Cat;' dentro o fuera del código funciona igual y todavía obtengo 'true' en' instanceof' s. Además, la línea 'Object.create()' hace 'cat.name' indefinido. http://jsbin.com/uhogig/edit#javascript,html –