Карточка 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 ошибок.