Function.prototype.call()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Сводка

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

Примечание: Хотя синтаксис этой функции практически полностью идентичен функции apply(), фундаментальное различие между ними заключается в том, что функция call() принимает список аргументов, в то время, как функция apply()- одиночный массив аргументов.

Синтаксис

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

Параметры

thisArg

Значение this, предоставляемое для вызова функции fun. Обратите внимание, что this может не быть реальным значением, видимым этим методом: если метод является функцией в нестрогом режиме, значения null и undefined будут заменены глобальным объектом, а примитивные значения будут упакованы в объекты.

arg1, arg2, ...

Аргументы для объекта.

Описание

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

Примеры

Пример: использование call для связи конструкторов объекта в цепочку

Вы можете использовать метод call для объединения в цепочку конструкторов объекта, как в Java. В следующем примере для объекта продукта Product объявлен конструктор с двумя параметрами, названием name и ценой price. Продукт инициализирует свойства name и price, а специализированные функции определяют ещё категорию category.

js
function Product(name, price) { this.name = name; this.price = price; if (price < 0) { throw RangeError( "Нельзя создать продукт " + this.name + " с отрицательной ценой", ); } } function Food(name, price) { Product.call(this, name, price); this.category = "еда"; } Food.prototype = Object.create(Product.prototype); function Toy(name, price) { Product.call(this, name, price); this.category = "игрушка"; } Toy.prototype = Object.create(Product.prototype); var cheese = new Food("фета", 5); var fun = new Toy("робот", 40); 

Пример: использование call для вызова анонимной функции

В этом чисто искусственном примере, мы создаём анонимную функцию и используем call для вызова её на каждом элементе массива. Главная задача анонимной функции здесь — добавить функцию печати в каждый объект, способную напечатать правильный индекс объекта в массиве. Передача объекта в качестве значения this не является острой необходимостью, но мы делаем это в целях объяснения.

js
var animals = [ { species: "Лев", name: "Король" }, { species: "Кит", name: "Фэйл" }, ]; for (var i = 0; i < animals.length; i++) { (function (i) { this.print = function () { console.log("#" + i + " " + this.species + ": " + this.name); }; this.print(); }).call(animals[i], i); } 

Спецификации

Specification
ECMAScript® 2026 Language Specification
# sec-function.prototype.call

Совместимость с браузерами

Смотрите также