2.5 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7db0367417b2b2512b83 | Usa herencia para que no te repitas | 1 | 301334 | use-inheritance-so-you-dont-repeat-yourself |
--description--
Hay un principio en la programación llamado No te repitas (Don't Repeat Yourself "DRY"). La razón por la que el código repetido es un problema es porque cualquier tipo de cambio requiere corregir código en múltiples lugares. Esto suele significar más trabajo para los programadores y más espacio para errores.
Observa en el siguiente ejemplo como el método describe
es compartido por Bird
y Dog
:
Bird.prototype = {
constructor: Bird,
describe: function() {
console.log("My name is " + this.name);
}
};
Dog.prototype = {
constructor: Dog,
describe: function() {
console.log("My name is " + this.name);
}
};
El método describe
se repite en dos lugares. El código se puede editar para seguir el principio DRY creando un supertype
(o padre) llamado Animal
:
function Animal() { };
Animal.prototype = {
constructor: Animal,
describe: function() {
console.log("My name is " + this.name);
}
};
Dado que Animal
incluye el método describe
, puedes eliminarlo de Bird
y Dog
:
Bird.prototype = {
constructor: Bird
};
Dog.prototype = {
constructor: Dog
};
--instructions--
El método eat
se repite tanto en Cat
como Bear
. Edita el código utilizando el principio DRY, moviendo el método eat
al supertype
Animal
.
--hints--
Animal.prototype
debe tener la propiedad eat
.
assert(Animal.prototype.hasOwnProperty('eat'));
Bear.prototype
no debe tener la propiedad eat
.
assert(!Bear.prototype.hasOwnProperty('eat'));
Cat.prototype
no debe tener la propiedad eat
.
assert(!Cat.prototype.hasOwnProperty('eat'));
--seed--
--seed-contents--
function Cat(name) {
this.name = name;
}
Cat.prototype = {
constructor: Cat,
eat: function() {
console.log("nom nom nom");
}
};
function Bear(name) {
this.name = name;
}
Bear.prototype = {
constructor: Bear,
eat: function() {
console.log("nom nom nom");
}
};
function Animal() { }
Animal.prototype = {
constructor: Animal,
};
--solutions--
function Cat(name) {
this.name = name;
}
Cat.prototype = {
constructor: Cat
};
function Bear(name) {
this.name = name;
}
Bear.prototype = {
constructor: Bear
};
function Animal() { }
Animal.prototype = {
constructor: Animal,
eat: function() {
console.log("nom nom nom");
}
};