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