From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/function/call/index.html | 168 +++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/function/call/index.html (limited to 'files/uk/web/javascript/reference/global_objects/function/call') diff --git a/files/uk/web/javascript/reference/global_objects/function/call/index.html b/files/uk/web/javascript/reference/global_objects/function/call/index.html new file mode 100644 index 0000000000..caa12e71b0 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/function/call/index.html @@ -0,0 +1,168 @@ +--- +title: Function.prototype.call() +slug: Web/JavaScript/Reference/Global_Objects/Function/call +tags: + - Function + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Function/call +--- +
{{JSRef}}
+ +

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

+ +
+

Заувага: Хоча за своїм призначенням цей метод і {{jsxref("Function.prototype.apply", "apply()")}} є тотожними, аргументи для викликаної функції передаються в дещо різний спосіб: метод call() приймає їх перелік, тоді як метод apply() приймає їх масив.

+
+ +
{{EmbedInteractiveExample("pages/js/function-call.html")}}
+ + + +

Синтаксис

+ +
function.call(thisArg[, arg1[, arg2[, ...]]])
+ +

Параметри

+ +
+
thisArg {{optional_inline}}
+
Значення this, яке буде застосовано для виклику function. Зауважте, що значення thisArg може зазнати перетворень — якщо функція function виконується у {{jsxref("Functions_and_function_scope/Strict_mode", "поблажливому режимі", "", 1)}}, тоді замість {{jsxref("Global_Objects/null", "null")}} та {{jsxref("Global_Objects/undefined", "undefined")}} буде застосовано {{glossary("Global_object", "глобальний об'єкт")}}, а {{glossary("Primitive", "прості величини")}} буде обернено на об'єкти.
+
arg1, arg2, ... {{optional_inline}}
+
Аргументи, що їх буде передано до функції function.
+
+ +

Вертає

+ +

Значення, яке внаслідок виклику повернула сама функція function.

+ +

Опис

+ +

Метод call() здійснює виклик функції, заступаючи значення ключового слова this всередині неї значенням, переданим до call() як перший аргумент. Це уможливлює одноразове написання деякої функції з можливістю її надалі викликати для всякого об'єкта так, наче вона є його методом.

+ +

Приклади

+ +

Виклик успадкованих конструкторів за допомогою call

+ +

Методом call() можна скористатись для створення ланцюжка конструкторів об'єкта, як у Java. У наведеному прикладі конструктор Product (виріб) має два параметри: назву (name) й ціну (price). Два інші конструктори — Food (їжа) і Toy (цяцька) — спершу викликають конструктор Product, передаючи потрібні йому значення name і price, а відтак додають окрему властивість category (різновид).

+ +
function Product(name, price) {
+  this.name = name;
+  this.price = price;
+}
+
+function Food(name, price) {
+  Product.call(this, name, price);
+  this.category = 'food';
+}
+
+function Toy(name, price) {
+  Product.call(this, name, price);
+  this.category = 'toy';
+}
+
+var cheese = new Food('feta', 5);
+var fun = new Toy('robot', 40);
+
+ +

Виклик неназваних функцій за допомогою метода call

+ +

Цей суто надуманий приклад містить використання метода call для виклику анонімної функції на кожному об'єкті з масиву.

+ +

Всередині цієї анонімної функції кожен об'єкт отримує окремий метод print, що друкуватиме значення властивостей об'єкта та його розташунок (індекс) в масиві. Передача об'єкта саме як 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);
+}
+
+ +

Виклик функції та перевиознака this за допомогою метода call

+ +

Під час виклику функції greet в цьому прикладі значення this буде прив'язано до об'єкта obj:

+ +
function greet() {
+  var message = 'Вітаємо, ' + (this.isMale ? 'пане ' : 'пані ') + this.name;
+  console.log(message);
+}
+
+var obj = {
+  isMale: false, name: 'Олено'
+};
+
+greet.call(obj);  // Вітаємо, пані Олено
+
+ +

Виклик функції за допомогою метода call без зазначення першого аргумента

+ +

Як засвідчує цей приклад, відсутність першого аргумента метода call має наслідком прив'язування this до {{glossary('global object', 'глобального об\'єкта')}}:

+ +
var name = 'Тарас';
+
+var x = {
+  name: 'Микола',
+  display: function() {
+    console.log('Мене звуть ' + this.name);
+  }
+};
+
+x.display();  // Мене звуть Микола
+x.display.call();  // Мене звуть Тарас
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES1')}}{{Spec2('ES1')}}Початкова виознака. Запроваджено у JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ESDraft')}}
+ +

Підтримка веб-переглядачами

+ + + +
{{Compat("javascript.builtins.Function.call")}}
+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf