UNPKG

planetproto

Version:

A Workshop for understanding JavaScript prototypes

57 lines (38 loc) 2.44 kB
'Функція прототип' ------------------------ Кожна функція в 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. Цей файл вже створено для вас.