planetproto
Version:
A Workshop for understanding JavaScript prototypes
57 lines (38 loc) • 2.44 kB
Markdown
'Функція прототип'
------------------------
Кожна функція в JavaScript має спеціальну властивість під назвою `prototype`.
```js
function Alien() {}
Alien.prototype;
```
Може здатися, що властивість `prototype` це не реальний прототип (`__proto__`) функції.
```js
Alien.__proto__ === Alien.prototype; //=> false
```
Це викликає платаницю у визначенні терміну 'прототип'.
Правильним буде називати властивість `prototype` як '__функція прототип__', а не як 'прототип'.
Ця властивість `prototype` буде вказувати на об'єкт, який буде назначено прототипом екземпляра в разі, якщо його створено за допомогою `new`.
Заплутано? Це краще показати на прикладі:
```js
function Alien(name) {
this.name = name;
}
// функція Alien має властивість прототип
// ми можемо додати до функції прототипу
Alien.prototype.kind = 'alien';
// коли ми створимо новий об'єкт за допомогою 'new'
var zippy = new Alien('Zippy');
// __proto__ квазує на Alien.prototype
zippy.__proto__ == Alien.prototype; //=> true
// в новому об'єкті ми маємо доступ до властивостей. що були у Alien.prototype
zippy.kind; //=> alien
```
Тут [діаграма показє відносини](https://docs.google.com/drawings/d/1AKJcvxs0t3iGtqkRV8rFAWlo7tojkOSwjfhr1NWaTb0/pub?w=889&h=482).
Таким чином, якщо ви створите два екземпляра `Alien`, обидва матимуть `Alien.prototype` в `__proto__`. Тобто, будуть використовувати його сумісно.
Це найважливіше, що ви маєте знати про об'єктну модель JavaScript.
Розуміння того, як пов'язані між собою `__proto__` та `function.prototype` зробить вас щасливим.
А може й ні :).
Завдання
---------
Дотримуйстесь інструкцій з файлу 100.js.
Цей файл вже створено для вас.