JavaScript Function.prototype — прототип для нових об'єктів
Властивість prototype — це об'єкт, який стане прототипом усіх екземплярів, створених через new.
Загальний опис
Тут — найплутаніше місце в мові, і плутанина від схожості імен. prototype є в функції і каже, яким буде прототип майбутніх екземплярів. А __proto__ (чи Reflect.getPrototypeOf()) є в об'єкта й каже, який прототип у нього самого.
Методи, покладені у prototype, спільні для всіх екземплярів — вони існують в одному примірнику, а не копіюються в кожен об'єкт. Саме тому класи економні щодо пам'яті.
У стрілкових функцій цієї властивості немає взагалі — і саме тому їх не можна викликати через new.
- Нотатка
-
Стрілкова функція не має
автор: NagarDprototype, тожnew (() => {})кидаєTypeError. Це не обмеження, а суть: стрілка — не конструктор.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| prototype | 1+ | 1+ | 1+ | 3+ | 12+ | 9+ |
| Переглядач | ||||
|---|---|---|---|---|
| prototype | yes | yes | yes | yes |
Приклади
+ запропонувати свій приклад у пісочниці
Метод у прототипі спільний для всіх екземплярів.
function User(name) {
this.name = name;
}
// метод спільний — існує в ОДНОМУ примірнику
User.prototype.greet = function () {
return 'Привіт, ' + this.name;
};
const a = new User('Іван');
const b = new User('Марія');
console.log(a.greet === b.greet); // true — та сама функція
// клас робить те саме, лише зрозуміліше
class Modern {
greet() {}
}
// у стрілки prototype немає
console.log((() => {}).prototype); // undefined
Коментарі
Коментарів ще немає — будьте першим!