Карточка Middle Реализация с нуля обновлено

Свой call без call и apply

Вопрос

Как реализовать myCall(ctx, ...args) без call, apply и bind?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

Положить функцию во временное свойство контекста под уникальным ключом Symbol(), вызвать её как метод ctxkey, чтобы сработало правило «this это объект слева от точки», сохранить результат, удалить свойство и вернуть результат. Для null/undefined взять globalThis, примитивы обернуть через Object(ctx).

Ответ

Положить функцию во временное свойство контекста под уникальным ключом Symbol(), вызвать её как метод ctx[key](...args), чтобы сработало правило «this это объект слева от точки», сохранить результат, удалить свойство и вернуть результат. Для null/undefined взять globalThis, примитивы обернуть через Object(ctx).

Разбор

Symbol гарантирует, что временный ключ не перетрёт существующее свойство.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.