freeCodeCamp/curriculum/challenges/russian/02-javascript-algorithms-an.../object-oriented-programming/use-inheritance-so-you-dont...

81 lines
3.8 KiB
Markdown
Raw Normal View History

---
id: 587d7db0367417b2b2512b83
title: Use Inheritance So You Don't Repeat Yourself
challengeType: 1
videoUrl: ''
localeTitle: 'Используйте Наследование, чтобы вы не повторяли себя'
---
## Description
<section id="description"> В программировании есть принцип « <code>Don&#39;t Repeat Yourself (DRY)</code> . Причина повторного кода - проблема, потому что для любого изменения требуется код исправления в нескольких местах. Это обычно означает больше работы для программистов и больше возможностей для ошибок. В приведенном ниже примере обратите внимание, что метод <code>describe</code> разделяет <code>Bird</code> and <code>Dog</code> : <blockquote> Bird.prototype = { <br> конструктор: Птица, <br> Опишите: function () { <br> console.log («Мое имя» + this.name); <br> } <br> }; <br><br> Dog.prototype = { <br> конструктор: Собака, <br> Опишите: function () { <br> console.log («Мое имя» + this.name); <br> } <br> }; </blockquote> Метод <code>describe</code> повторяется в двух местах. Код можно редактировать, чтобы следовать принципу <code>DRY</code> , создав <code>supertype</code> (или родительский элемент) под названием <code>Animal</code> : <blockquote> функция Animal () {}; <br><br> Animal.prototype = { <br> конструктор: Animal, <br> Опишите: function () { <br> console.log («Мое имя» + this.name); <br> } <br> }; </blockquote> Поскольку <code>Animal</code> включает метод <code>describe</code> , вы можете удалить его из <code>Bird</code> and <code>Dog</code> : <blockquote> Bird.prototype = { <br> конструктор: Птица <br> }; <br><br> Dog.prototype = { <br> конструктор: Собака <br> }; </blockquote></section>
## Instructions
<section id="instructions"> Метод <code>eat</code> повторяется как у <code>Cat</code> и у <code>Bear</code> . Измените код в духе <code>DRY</code> , переместив метод <code>eat</code> на <code>supertype</code> <code>Animal</code> . </section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>Animal.prototype</code> должен иметь свойство <code>eat</code> .
testString: 'assert(Animal.prototype.hasOwnProperty("eat"), "<code>Animal.prototype</code> should have the <code>eat</code> property.");'
- text: <code>Bear.prototype</code> не должен иметь свойство <code>eat</code> .
testString: 'assert(!(Bear.prototype.hasOwnProperty("eat")), "<code>Bear.prototype</code> should not have the <code>eat</code> property.");'
- text: <code>Cat.prototype</code> не должен иметь свойство <code>eat</code> .
testString: 'assert(!(Cat.prototype.hasOwnProperty("eat")), "<code>Cat.prototype</code> should not have the <code>eat</code> property.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```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,
};
```
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
```
</section>