Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию

Дан код:

function f() { 
  console.log(this.x);
}
const obj = {x: 'bar'};

Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию.

Теория по задаче

Рассмотрим разные подходы, позволяющие задать нужный контекст для вызова функции и таким образом обеспечить вывод нужного значения поля объекта.

  1. Метод .call Метод .call позволяет явно задать контекст (this), в котором будет выполнена функция. Аргументы передаются последовательно после указанного контекста.

Пример:

f.call(obj); // Выведет 'bar'
  1. Метод .apply Метод .apply похож на .call, но отличается тем, что аргументы передаются массивом. Для данной задачи, поскольку аргументов нет, разница минимальна.

Пример:

f.apply(obj); // Выведет 'bar'
  1. Метод .bind Метод .bind создает новую функцию, жестко привязывая указанный контекст к ней. Новый вызов функции выполняется именно в указанном контексте.

Пример:

var boundF = f.bind(obj);
boundF(); // Выведет 'bar'
  1. Прямой вызов через точку (если функция является методом объекта) Можно добавить функцию непосредственно в объект и вызвать её через точечную нотацию, тогда this будет правильно установлен в объект.

Пример:

obj.f = f;
obj.f(); // Выведет 'bar'
delete obj.f; // Удаляем свойство после использования
  1. Изменение прототипа объекта Добавляем функцию в прототип объекта, тогда она будет доступна как метод объекта obj и выполнится с нужным контекстом.

Пример:

obj.__proto__.f = f;
obj.f(); // Выведет 'bar'
delete obj.__proto__.f; // Убираем метод после использования

Навигация по странице