2021-06-15 00:49:18 -07:00
---
id: 587d7db0367417b2b2512b83
2021-07-21 20:53:20 +05:30
title: Utilizar herança para não se repetir
2021-06-15 00:49:18 -07:00
challengeType: 1
forumTopicId: 301334
dashedName: use-inheritance-so-you-dont-repeat-yourself
---
# --description--
2021-07-30 23:57:21 +09:00
Tem um princípio da programação chamado < dfn > Don't Repeat Yourself (DRY) - Não se Repita< / dfn > . O motivo pelo qual código repetido é um problema se deve ao fato de qualquer alteração exige correção de código em vários locais. Geralmente isso significa mais trabalho para os programadores e mais espaço para erros.
2021-06-15 00:49:18 -07:00
2021-07-30 23:57:21 +09:00
Note que, no exemplo abaixo, o método `describe` é compartilhado por `Bird` e `Dog` :
2021-06-15 00:49:18 -07:00
```js
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);
}
};
```
2021-07-30 23:57:21 +09:00
O método `describe` é repetido em dois locais. O código pode ser editado para seguir o princípio DRY (Não se Repita) ao criar um `supertype` (ou parente) chamado `Animal` :
2021-06-15 00:49:18 -07:00
```js
function Animal() { };
Animal.prototype = {
constructor: Animal,
describe: function() {
console.log("My name is " + this.name);
}
};
```
2021-07-16 11:03:16 +05:30
Desde que `Animal` inclui o método `describe` , você pode remover ele de `Bird` e `Dog` :
2021-06-15 00:49:18 -07:00
```js
Bird.prototype = {
constructor: Bird
};
Dog.prototype = {
constructor: Dog
};
```
# --instructions--
2021-07-30 23:57:21 +09:00
O método `eat` é repetido em `Cat` e `Bear` . Edite o código no espírito do princípio DRY ao mover o método `eat` do `supertype` de `Animal` .
2021-06-15 00:49:18 -07:00
# --hints--
2021-07-16 11:03:16 +05:30
`Animal.prototype` deve ter a propriedade `eat` .
2021-06-15 00:49:18 -07:00
```js
assert(Animal.prototype.hasOwnProperty('eat'));
```
2021-07-16 11:03:16 +05:30
`Bear.prototype` não deve ter a propriedade `eat` .
2021-06-15 00:49:18 -07:00
```js
assert(!Bear.prototype.hasOwnProperty('eat'));
```
2021-07-16 11:03:16 +05:30
`Cat.propotype` não deve ter a propriedade `eat` .
2021-06-15 00:49:18 -07:00
```js
assert(!Cat.prototype.hasOwnProperty('eat'));
```
# --seed--
## --seed-contents--
```js
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--
```js
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");
}
};
```