JavaScript Reflect.setPrototypeOf() — змінити прототип об'єкта
Метод Reflect.setPrototypeOf() змінює прототип уже створеного об'єкта.
Загальний опис
Технічно він працює. Практично — це одна з найповільніших операцій у мові.
Причина в тому, що рушій оптимізує об'єкти під припущення про їхню форму. Зміна прототипу на льоту руйнує всі ці оптимізації — і не лише для цього об'єкта, а для всього коду, що з ним працює.
Тому правильний шлях — задати прототип при створенні: через Object.create() або звичайний class.
- Нотатка
-
Зміна прототипу на льоту вбиває продуктивність. У документації V8 це прямо названо антипаттерном. Якщо здається, що він потрібен — майже напевно потрібен
автор: NagarDObject.create().
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| setPrototypeOf | 49+ | 42+ | 10+ | 36+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| setPrototypeOf | 49+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Так робити не варто — і як треба.
const animal = { speak: () => console.log('звук') };
const dog = {};
// працює, але вбиває оптимізації рушія
Reflect.setPrototypeOf(dog, animal);
dog.speak();
// правильно — задати прототип ОДРАЗУ
const betterDog = Object.create(animal);
betterDog.speak();
Коментарі
Коментарів ще немає — будьте першим!