Задать вопрос
@undefined_title

Возможно ли написать свою реализацию call, apply?

var f = function() {console.log(this)}
f() // window
f.call({}) // {}
// как написать свою
f.myCall({}) // {}

// есть вариант, но не совсем так же работает
Function.prototype.myCall = function (context) { 
  context[this.name] = this;
  context[this.name]();
  delete context[this.name];
}
f.myCall({})  // {f: Function}
  • Вопрос задан
  • 529 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Да, можно.

Вообще, call \ apply предполагают, что this внутри функции будет иметь переданное значение. Эмуляцию гарантированно можно сделать при помощи метода bind. Если без него - то вряд ли, this невозможно перезаписать, если только пилить адовые костыли и не использовать this вообще.

В этом случае вам придется передавать, например, _this в список аргументов функции или записывать контекст в ее свойства. Однако это все равно не будет полноценной эмуляцией без участия bind, потому что тогда использующему ваш полифилл придется использовать именно это свойство - _this, и забыть про нативный this.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы