90 lines
3.9 KiB
Markdown
90 lines
3.9 KiB
Markdown
![]() |
---
|
|||
|
id: 587d7dae367417b2b2512b79
|
|||
|
title: Розширити конструктори для отримання аргументів
|
|||
|
challengeType: 1
|
|||
|
forumTopicId: 18235
|
|||
|
dashedName: extend-constructors-to-receive-arguments
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Конструктори `Bird` та `Dog` з останнього завдання працювали добре. Однак зверніть увагу, що всі `Birds`, створені за допомогою конструктора `Bird`, автоматично називаються Альбертом, мають синій колір і мають дві ніжки. Що робити, якщо вам потрібні birds з різними значеннями для назви та кольору? Змінити властивості кожної bird можна вручну, але це займе багато часу:
|
|||
|
|
|||
|
```js
|
|||
|
let swan = new Bird();
|
|||
|
swan.name = "Carlos";
|
|||
|
swan.color = "white";
|
|||
|
```
|
|||
|
|
|||
|
Припустимо, ви писали програму для відстеження сотень чи навіть тисяч різних bird у вольєрі. Це займе багато часу, щоб створити всі birds, а потім змінити для кожного властивості на різні значення. Щоб легше створювати різні об'єкти `Bird`, ви можете спроектувати свій конструктор Bird для прийняття параметрів:
|
|||
|
|
|||
|
```js
|
|||
|
function Bird(name, color) {
|
|||
|
this.name = name;
|
|||
|
this.color = color;
|
|||
|
this.numLegs = 2;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Потім передайте значення в якості аргументів для визначення кожного унікального bird в конструкторі `Bird`: `let cardinal = new Bird("Bruce", "red");` Це дає новий екземпляр `Bird` із властивостями `name` та `color`, встановленими відповідно до `Bruce` та й відповідно до `red`. Для властивості `numLegs` все ще відповідає значення 2. `cardinal` має такі властивості:
|
|||
|
|
|||
|
```js
|
|||
|
cardinal.name
|
|||
|
cardinal.color
|
|||
|
cardinal.numLegs
|
|||
|
```
|
|||
|
|
|||
|
Конструктор є більш гнучким. Тепер можна визначити властивості для кожної `Bird` під час її створення, що є одним із способів, яким конструктори JavaScript так корисні. Вони поєднують об’єкти разом на основі спільних характеристик та поведінки та визначають план, який автоматизує створення.
|
|||
|
|
|||
|
# --instructions--
|
|||
|
|
|||
|
Створіть ще один конструктор `Dog`. Цього разу встановіть його так щоб прийняти параметри `name` та `color` і встановіть властивість `numLegs` на 4. Потім створіть новий `Dog`, збережений у змінній `terrier`. Передайте два рядки в якості аргументів для властивостей `name` and `color`.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
`Dog` має отримати аргумент для `name`.
|
|||
|
|
|||
|
```js
|
|||
|
assert(new Dog('Clifford').name === 'Clifford');
|
|||
|
```
|
|||
|
|
|||
|
`Dog` має отримати аргумент для `color`.
|
|||
|
|
|||
|
```js
|
|||
|
assert(new Dog('Clifford', 'yellow').color === 'yellow');
|
|||
|
```
|
|||
|
|
|||
|
`Dog` має мати властивості `numLegs` значення 4.
|
|||
|
|
|||
|
```js
|
|||
|
assert(new Dog('Clifford').numLegs === 4);
|
|||
|
```
|
|||
|
|
|||
|
`terrier` слід створити за допомогою конструктора `Dog`.
|
|||
|
|
|||
|
```js
|
|||
|
assert(terrier instanceof Dog);
|
|||
|
```
|
|||
|
|
|||
|
# --seed--
|
|||
|
|
|||
|
## --seed-contents--
|
|||
|
|
|||
|
```js
|
|||
|
function Dog() {
|
|||
|
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
# --solutions--
|
|||
|
|
|||
|
```js
|
|||
|
function Dog (name, color) {
|
|||
|
this.numLegs = 4;
|
|||
|
this.name = name;
|
|||
|
this.color = color;
|
|||
|
}
|
|||
|
|
|||
|
const terrier = new Dog();
|
|||
|
```
|