This page was translated from English by the community.Learn more and join the MDN Web Docs community.
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 июль 2015 г..
Сводка
Методcall() вызывает функцию с указанным значениемthis и индивидуально предоставленными аргументами.
Примечание:Хотя синтаксис этой функции практически полностью идентичен функцииapply(), фундаментальное различие между ними заключается в том, что функцияcall() принимаетсписок аргументов, в то время, как функцияapply()- одиночный массив аргументов.
In this article
Синтаксис
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.
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 не является острой необходимостью, но мы делаем это в целях объяснения.
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> |