this - это первый аргумент метода .call() или .apply() в непрямом вызове

В следующем примере показан контекст непрямого вызова:

const world = { name: 'Мир' };
function phrase(string) {
  console.log(this === world);  // => true
  return string + this.name;
}
// Непрямой вызов
phrase.call(world, 'Привет ');  // => 'Привет Мир'
phrase.apply(world, ['Пока ']);  // => 'Пока Мир'

Непрямой вызов полезен, когда функция должна выполняться с определенным контекстом. Например, для решения проблем контекста с вызовом функции, где this это всегда window или undefined в строгом режиме (см. 2.3). Его можно использовать для имитации вызова метода объекта (см. предыдущий пример).

Другой практический пример - создание иерархии классов в ES5 для вызова родительского конструктора:

function Runner(type) {
  console.log(this instanceof Animal);  // => true
  this.type = type;
}
function Animal(type, legs) {
  console.log(this instanceof Animal);  // => true
  // Непрямой вызов. Вызов родительского конструктора.
  Runner.call(this, type);
  this.legs = legs;
}
const dog = new Animal('Собака', 4);
dog;  // { type: 'Собака', legs: 4 }

Runner.call(this, type) внутри Animal выполняет непрямой вызов родительской функции для инициализации объекта.