@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}
  • Вопрос задан
  • 502 просмотра
Пригласить эксперта
Ответы на вопрос 1
Да, можно.

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

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

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

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