--- id: 587d7dae367417b2b2512b79 title: Extend Constructors to Receive Arguments challengeType: 1 forumTopicId: 18235 localeTitle: Расширить конструкторы для получения аргументов --- ## Description
Конструкторы Bird and Dog из последней задачи хорошо работали. Однако обратите внимание, что все Birds , созданные с помощью конструктора Bird , автоматически называются Albert, имеют синий цвет и имеют две ноги. Что делать, если вы хотите, чтобы птицы с разными значениями имели название и цвет? Можно изменить свойства каждой птицы вручную, но это будет много работы:
пусть лебедь = новая птица ();
swan.name = "Carlos";
swan.color = "white";
Предположим, вы писали программу, чтобы отслеживать сотни или даже тысячи разных птиц во вольерах. Это займет много времени, чтобы создать всех птиц, а затем изменить свойства на разные значения для каждого. Чтобы легче создать разные объекты Bird , вы можете сконструировать конструктор Bird для принятия параметров:
функция Птица (имя, цвет) {
this.name = name;
this.color = color;
this.numLegs = 2;
}
Затем передайте значения в качестве аргументов, чтобы определить каждую уникальную птицу в конструкторе Bird : let cardinal = new Bird("Bruce", "red"); Это дает новый экземпляр Bird с именем и цветовыми свойствами, установленными на Bruce и red, соответственно. Свойство numLegs по-прежнему установлено numLegs 2. cardinal обладает следующими свойствами:
cardinal.name // => Брюс
cardinal.color // => красный
cardinal.numLegs // => 2
Конструктор более гибкий. Теперь можно определить свойства для каждой Bird в момент ее создания, что является одним из способов использования JavaScript-конструкторов. Они группируют объекты вместе на основе общих характеристик и поведения и определяют план, который автоматизирует их создание.
## Instructions
Создайте еще один конструктор Dog . На этот раз настройте его, чтобы взять name и color , а также свойство numLegs установленное в 4. Затем создайте новую Dog сохраненную в переменной terrier . Передайте две строки в качестве аргументов для свойств name и color .
## Tests
```yml tests: - text: Dog should receive an argument for name. testString: assert((new Dog('Clifford')).name === 'Clifford'); - text: Dog should receive an argument for color. testString: assert((new Dog('Clifford', 'yellow')).color === 'yellow'); - text: Dog should have property numLegs set to 4. testString: assert((new Dog('Clifford')).numLegs === 4); - text: terrier should be created using the Dog constructor. testString: assert(terrier instanceof Dog); ```
## Challenge Seed
```js function Dog() { } ```
## Solution
```js function Dog (name, color) { this.numLegs = 4; this.name = name; this.color = color; } const terrier = new Dog(); ```