81 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | id: 587d7db0367417b2b2512b83 | |||
|  | title: Use Inheritance So You Don't Repeat Yourself | |||
|  | challengeType: 1 | |||
|  | videoUrl: '' | |||
|  | localeTitle: 'Используйте Наследование, чтобы вы не повторяли себя' | |||
|  | --- | |||
|  | 
 | |||
|  | ## Description
 | |||
|  | <section id="description"> В программировании есть принцип « <code>Don'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> |