diff options
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/function')
11 files changed, 0 insertions, 1762 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/function/apply/index.html b/files/uk/web/javascript/reference/global_objects/function/apply/index.html deleted file mode 100644 index 78183d8102..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/apply/index.html +++ /dev/null @@ -1,239 +0,0 @@ ---- -title: Function.prototype.apply() -slug: Web/JavaScript/Reference/Global_Objects/Function/apply -tags: - - Function - - JavaScript - - Довідка - - Функція - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply ---- -<div>{{JSRef}}</div> - -<p>Метод <code><strong>apply()</strong></code> викликає функцію із заданим значенням <code>this</code> та аргументами, переданими у вигляді масиву (або <a href="/uk/docs/Web/JavaScript/Guide/Indexed_collections#Working_with_array-like_objects">подібного до масиву об'єкта</a>).</p> - -<div class="note"> -<p><strong>Заувага:</strong> Хоча синтаксис цієї функції є майже ідентичним до синтаксису {{jsxref("Function.call", "call()")}}, фундаментальна відмінність полягає в тому, що метод <code>call()</code> приймає <strong>список аргументів</strong>, тоді як метод <code>apply()</code> приймає <strong>єдиний масив аргументів</strong>.</p> -</div> - -<div class="blockIndicator note"> -<p><strong>Заувага:</strong> Коли першим аргументом є undefined або null, схожий результат можна отримати за допомогою <a href="/uk/docs/Web/JavaScript/Reference/Operators/Spread_syntax">оператора розпакування</a> масивів.</p> -</div> - -<p>{{EmbedInteractiveExample("pages/js/function-apply.html")}}</p> - -<div class="hidden"> -<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> -</div> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><var>function</var>.apply(<var>thisArg, </var>[<var>argsArray</var>])</pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>thisArg</code></dt> - <dd>Значення <code>this</code>, передане для виклику у функцію <em><code>function</code></em>. Зазначте, що <code>this</code> може не бути фактичним значенням, яке бачить метод: якщо метод є функцією не у {{jsxref("Strict_mode", "строгому режимі", "", 1)}}, {{jsxref("null")}} та {{jsxref("undefined")}} будуть замінені глобальним об'єктом, а прості значення будуть запаковані. Цей аргумент є обов'язковим.</dd> - <dt><code>argsArray</code></dt> - <dd>Необов'язковий. Подібний до масиву об'єкт, що визначає аргументи, з якими функція має бути викликана, або {{jsxref("null")}} чи {{jsxref("undefined")}}, якщо жодних аргументів не має бути передано у функцію. Починаючи з ECMAScript 5, ці аргументи можуть бути загальними подібними до масиву об'єктами замість масиву. Дивіться нижче інформацію щодо {{anch("Сумісність_з_веб-переглядачами", "сумісності з веб-переглядачами")}}.</dd> -</dl> - -<h3 id="Значення_яке_повертається">Значення, яке повертається</h3> - -<p>Результат виконання функції з вказаним значенням <code><strong>this</strong></code> та аргументами.</p> - -<h2 id="Опис">Опис</h2> - -<p>Ви можете присвоїти інший об'єкт <code>this</code>, коли викликаєте існуючу функцію. <code>this</code> посилається на поточний об'єкт, з якого здійснюється виклик. З <code>apply</code> ви можете написати метод один раз, а потім успадковувати його в іншому об'єкті, без необхідності переписувати метод для нового об'єкта.</p> - -<p>Метод <code>apply</code> дуже схожий на {{jsxref("Function.call", "call()")}}, за виключенням типу аргументів, які він підтримує. Ви використовуєте масив аргументів замість списку аргументів (параметрів). З методом <code>apply</code> ви також можете використовувати літерал масиву, для прикладу, <code><em>func</em>.apply(this, ['їсти', 'банани'])</code>, або об'єкт {{jsxref("Array")}}, для прикладу, <code><em>func</em>.apply(this, new Array('їсти', 'банани'))</code>.</p> - -<p>Ви також можете використати об'єкт {{jsxref("Functions/arguments", "arguments")}} як параметр <code>argsArray</code>. <code>arguments</code> - локальна змінна функції. Вона може використовуватись для всіх не заданих аргументів об'єкта, який викликається. Таким чином, вам не потрібно знати аргументи об'єкта, що викликається, коли ви використовуєте метод <code>apply</code>. Ви можете скористатись об'єктом <code>arguments,</code> щоб передати усі аргументи. Далі об'єкт, який викликається, відповідає за обробку аргументів.</p> - -<p>З появою 5-ї версії ECMAScript, ви також можете використовувати будь-який подібний до масиву об'єкт, отже, на практиці це означає, що він має поле <code>length</code> та цілі числа в якості параметрів у діапазоні <code>(0...length-1)</code>. Як приклад, ви тепер можете використати {{domxref("NodeList")}} або власноруч написаний об'єкт виду <code>{ 'length': 2, '0': 'їсти', '1': 'банани' }</code>.</p> - -<div class="note"> -<p>Чимало більш старих переглядачів, в тому числі Chrome <17 та Internet Explorer <9, не приймають подібні до масиву об'єкти і викидатимуть виняток.</p> -</div> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Використання_apply_для_додавання_масиву_до_іншого_масиву">Використання <code>apply</code> для додавання масиву до іншого масиву</h3> - -<p>Ми можемо використати метод <code>push</code>, щоб додати елемент до масиву. І, оскільки <code>push</code> приймає змінну кількість аргументів, ми також можемо додати кілька елементів за раз. Але, якщо ми передамо у <code>push</code> масив, він додасть, власне, масив єдиним елементом, замість того, щоб додати окремі елементи, і ми отримаємо масив всередині масиву. Що, як ми не цього хотіли? Метод <code>concat</code> має поведінку, яка нам потрібна в цьому випадку, але він не додає елементи у існуючий масив, а створює та повертає новий масив. Але ми хотіли додати елементи у існуючий масив... Що ж робити? Писати цикл? Звісно, ні.</p> - -<p>На допомогу приходить <code>apply</code>!</p> - -<pre class="brush: js">var array = ['a', 'b']; -var elements = [0, 1, 2]; -array.push.apply(array, elements); -console.info(array); // ["a", "b", 0, 1, 2]</pre> - -<div class="note"></div> - -<h3 id="Використання_apply_та_вбудовані_функції">Використання <code>apply</code> та вбудовані функції</h3> - -<p>Розумне використання методу <code>apply</code> дозволяє використовувати вбудовані функції для деяких задач, які в іншому випадку ймовірно були б написані циклічним обходом значень масиву. Як приклад, ми збираємося використати <code>Math.max</code>/<code>Math.min,</code> щоб знайти максимальне/мінімальне значення масиву.</p> - -<pre class="brush: js">// мінімальне/максимальне число в масиві -var numbers = [5, 6, 2, 3, 7]; - -// використання Math.min/Math.max з apply -var max = Math.max.apply(null, numbers); -// Це практично дорівнює Math.max(numbers[0], ...) -// або Math.max(5, 6, ...) - -var min = Math.min.apply(null, numbers); - -// в порівнянні з простим алгоритмом на основі цикла -max = -Infinity, min = +Infinity; - -for (var i = 0; i < numbers.length; i++) { - if (numbers[i] > max) { - max = numbers[i]; - } - if (numbers[i] < min) { - min = numbers[i]; - } -} -</pre> - -<p>Але будьте обережні: використовуючи <code>apply</code> таким способом, ви ризикуєте перевищити ліміт кількості аргументів рушія JavaScript. Наслідки застосування функції, в якій забагато аргументів (більше, ніж десятки тисяч аргументів), різняться між різними рушіями (JavaScriptCore має жорстко закодований <a class="link-https" href="https://bugs.webkit.org/show_bug.cgi?id=80797">ліміт аргументів 65536</a>) тому, що ліміт (а насправді, навіть природа будь-якої поведінки надмірно великого стеку) є невизначеним. Деякі рушії викинуть виняток. Ще гірше, інші довільно обмежать кількість аргументів, які будуть насправді передані до застосованої функції. Для ілюстрації останнього випадку: якби такий рушій мав обмеження у чотири аргументи (справжні ліміти, звісно, значно більші), то замість цілого масиву у наведеному вище випадку до <code>apply</code> були б передані аргументи <code>5, 6, 2, 3</code>. </p> - -<p>Якщо ваш масив значень може вирости до десятків тисяч значень, використовуйте гібридну стратегію: застосовуйте вашу функцію до фрагментів масиву, по одному за раз:</p> - -<pre class="brush: js">function minOfArray(arr) { - var min = Infinity; - var QUANTUM = 32768; - - for (var i = 0, len = arr.length; i < len; i += QUANTUM) { - var submin = Math.min.apply(null, - arr.slice(i, Math.min(i+QUANTUM, len))); - min = Math.min(submin, min); - } - - return min; -} - -var min = minOfArray([5, 6, 2, 3, 7]); - -</pre> - -<h3 id="Використання_методу_apply_для_ланцюгового_виконання_конструкторів">Використання методу <code>apply</code> для ланцюгового виконання конструкторів</h3> - -<p>Ви можете використовувати <code>apply</code> для ланцюгового виконання {{jsxref("Operators/new", "конструкторів", "", 1)}} до об'єкта, подібно до Java. У наступному прикладі ми створимо глобальний метод {{jsxref("Function")}} під назвою <code>construct</code>, котрий дозволить використовувати подібний до масиву об'єкт з конструктором замість списку аргументів.</p> - -<pre class="brush: js">Function.prototype.construct = function(aArgs) { - var oNew = Object.create(this.prototype); - this.apply(oNew, aArgs); - return oNew; -}; -</pre> - -<div class="note"> -<p><strong>Заувага:</strong> Метод <code>Object.create(),</code> що використовується вище, є відносно новим. В якості альтернативних методів, будь ласка, розгляньте наступні підходи:</p> - -<p>Використання {{jsxref("Object/proto", "Object.__proto__")}}:</p> - -<pre class="brush: js">Function.prototype.construct = function (aArgs) { - var oNew = {}; - oNew.__proto__ = this.prototype; - this.apply(oNew, aArgs); - return oNew; -};</pre> - -<p><a href="/uk/docs/Web/JavaScript/Closures">Замикання</a>:</p> - -<pre class="brush: js">Function.prototype.construct = function(aArgs) { - var fConstructor = this, fNewConstr = function() { - fConstructor.apply(this, aArgs); - }; - fNewConstr.prototype = fConstructor.prototype; - return new fNewConstr(); -};</pre> - -<p>Конструктор {{jsxref("Function")}}:</p> - -<pre class="brush: js">Function.prototype.construct = function (aArgs) { - var fNewConstr = new Function(""); - fNewConstr.prototype = this.prototype; - var oNew = new fNewConstr(); - this.apply(oNew, aArgs); - return oNew; -};</pre> -</div> - -<p>Приклад використання:</p> - -<pre class="brush: js">function MyConstructor() { - for (var nProp = 0; nProp < arguments.length; nProp++) { - this['property' + nProp] = arguments[nProp]; - } -} - -var myArray = [4, 'Всім привіт!', false]; -var myInstance = MyConstructor.construct(myArray); - -console.log(myInstance.property1); // виведе 'Всім привіт!' -console.log(myInstance instanceof MyConstructor); // виведе 'true' -console.log(myInstance.constructor); // виведе 'MyConstructor' -</pre> - -<div class="note"> -<p><strong>Заувага:</strong> Цей не рідний метод <code>Function.construct</code> не буде працювати з деякими вбудованими конструкторами; такими, як {{jsxref("Date")}}, наприклад. У таких випадках, ви маєте використовувати метод {{jsxref("Function.prototype.bind")}} (наприклад, уявіть собі такий масив, що використовується з конструктором {{jsxref("Global_Objects/Date", "Date")}}: <code>[2012, 11, 4]</code>; у такому випадку вам доведеться написати щось по типу: <code>new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))()</code>. Це не найкращий підхід, і, мабуть, не варто це робити у будь-якому виробничому середовищі).</p> -</div> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES3')}}</td> - <td>{{Spec2('ES3')}}</td> - <td>Початкове визначення. Реалізовано у JavaScript 1.3.</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.3.4.3', 'Function.prototype.apply')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-function.prototype.apply', 'Function.prototype.apply')}}</td> - <td>{{Spec2('ES6')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function.prototype.apply', 'Function.prototype.apply')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div class="hidden"> -<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> -</div> - -<p>{{Compat("javascript.builtins.Function.apply")}}</p> - -<div id="compat-mobile"></div> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>Об'єкт {{jsxref("Functions/arguments", "arguments")}}</li> - <li>{{jsxref("Function.prototype.bind()")}}</li> - <li>{{jsxref("Function.prototype.call()")}}</li> - <li>{{jsxref("Functions", "Функції та область видимості функції", "", 1)}}</li> - <li>{{jsxref("Reflect.apply()")}}</li> - <li><a href="/uk/docs/Web/JavaScript/Reference/Operators/Spread_syntax">Оператор розпакування</a></li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/arguments/index.html b/files/uk/web/javascript/reference/global_objects/function/arguments/index.html deleted file mode 100644 index 009473b14d..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/arguments/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Function.arguments -slug: Web/JavaScript/Reference/Global_Objects/Function/arguments -tags: - - Function - - JavaScript - - arguments - - Властивість - - застаріла -translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments ---- -<div>{{JSRef}} {{deprecated_header}}</div> - -<p>Властивість <code><strong><em>function</em>.arguments</strong></code> посилається на подібний до масиву об'єкт, який відображає аргументи, передані у функцію. Використовуйте натомість просту змінну {{jsxref("Functions/arguments", "arguments")}}. Ця властивість заборонена у строгому режимі.</p> - -<h2 id="Опис">Опис</h2> - -<p>Синтаксис <code><em>function</em>.arguments</code> є застарілим. Рекомендуємий спосіб звернутися до об'єкта {{jsxref("Functions/arguments", "arguments")}}, що доступний всередині функцій, це просто скористатись змінною {{jsxref("Functions/arguments", "arguments")}}.</p> - -<p>У випадку рекурсії, тобто, якщо функція <code>f</code> з'являється кілька разів у стеку викликів, значення <code>f.arguments</code> відображає аргументи, що відповідають останньому виклику функції.</p> - -<p>Значення властивості arguments зазвичай дорівнює null, якщо немає незавершеного виклику функції у процесі (тобто, функція була викликана, але досі не повернула значення).</p> - -<h2 id="Приклади">Приклади</h2> - -<pre class="brush: js">function f(n) { g(n - 1); } - -function g(n) { - console.log('до: ' + g.arguments[0]); - if (n > 0) { f(n); } - console.log('після: ' + g.arguments[0]); -} - -f(2); - -console.log('повернено: ' + g.arguments); - -// Результат - -// до: 1 -// до: 0 -// після: 0 -// після: 1 -// повернено: null -</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкове визначення. Реалізоване у JavaScript 1.0. Застаріло через {{jsxref("Functions/arguments", "arguments")}} у ES3.</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-10.6', 'arguments object')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td>Об'єкт {{jsxref("Functions/arguments", "arguments")}}</td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-arguments-object', 'arguments object')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Об'єкт {{jsxref("Functions/arguments", "arguments")}}</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-arguments-object', 'arguments object')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td>Об'єкт {{jsxref("Functions/arguments", "arguments")}}</td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Function.arguments")}}</p> -</div> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>Об'єкт {{jsxref("Functions/arguments", "arguments")}}</li> - <li>{{jsxref("Functions", "Функції та область видимості функції", "", 1)}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/bind/index.html b/files/uk/web/javascript/reference/global_objects/function/bind/index.html deleted file mode 100644 index 9270baeac2..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/bind/index.html +++ /dev/null @@ -1,329 +0,0 @@ ---- -title: Function.prototype.bind() -slug: Web/JavaScript/Reference/Global_Objects/Function/bind -tags: - - ECMAScript 2015 - - Function - - JavaScript - - Method - - Зв'язування - - Функція - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind ---- -<div>{{JSRef}}</div> - -<p>Метод <code><strong>bind()</strong></code> створює нову функцію, яка в момент виклику має певне присвоєне значення <code>this</code>, а також задану послідовність аргументів, що передують будь-яким аргументам, переданим під час виклику нової функції.</p> - -<p>{{EmbedInteractiveExample("pages/js/function-bind.html", "taller")}}</p> - -<div class="hidden"> -<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> -</div> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><var>function</var>.bind(<var>thisArg</var>[, <var>arg1</var>[, <var>arg2</var>[, ...]]])</pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>thisArg</code></dt> - <dd>Значення, що передаватиметься як параметр <code>this</code> до цільової функції, коли зв'язана функція викликається. Це значення ігнорується, якщо зв'язана функція утворена викликом оператора {{jsxref("Operators/new", "new")}}. При використанні <code>bind</code> для створення функції (що подається для зворотного виклику) всередині <code>setTimeout</code>, будь-яке примітивне значення, що передається в якості <code>thisArg</code>, перетворюється на об'єкт. Якщо у <code>bind</code> не було передано жодних аргументів, <code>this</code> області видимості виконання передається як <code>thisArg</code> для нової функції.</dd> - <dt><code>arg1, arg2, ...</code></dt> - <dd>Аргументи, які будуть передувати аргументам, що були передані у зв'язану функцію, під час виклику цільової функції.</dd> -</dl> - -<h3 id="Значення_яке_повертається">Значення, яке повертається</h3> - -<p>Копія заданої функції із заданим значенням <strong><code>this</code></strong> та початковими аргументами.</p> - -<h2 id="Опис">Опис</h2> - -<p>Функція <code>bind()</code> створює нову зв'язану функцію, яка є екзотичним об'єктом-функцією (термін з ECMAScript 2015), що огортає початкову функцію. Загалом, результатом виклику зв'язаної функції є виконання функції, яку вона огортає.</p> - -<p>Зв'язана функція має наступні внутрішні властивості:</p> - -<ul> - <li><strong><code>[[BoundTargetFunction]]</code> </strong>- обгорнена функція;</li> - <li><code><strong>[[BoundThis]]</strong></code> - значення, яке завжди передається як значення <code>this</code><strong>,</strong> коли викликається обгорнена функція.</li> - <li><code><strong>[[BoundArguments]]</strong></code> - список значень, елементи якого використовуються як перші аргументи будь-якого виклику обгорненої функції.</li> - <li><code><strong>[[Call]]</strong></code> - виконує код, що пов'язаний з цим об'єктом. Запускається виразом виклику функції. Аргументами внутрішнього методу є значення <strong>this</strong> та список, що містить аргументи, передані у функцію виразом виклику.</li> -</ul> - -<p>Коли зв'язана функція викликається, вона викликає внутрішній метод <code>[[Call]]</code> на об'єкті <code>[[BoundTargetFunction]]</code> з наступними аргументами <code>Call(<em>boundThis</em>, <em>args</em>)</code>. Де <em><code>boundThis</code></em> - це <code>[[BoundThis]]</code>, а <code>args</code> - це <code>[[BoundArguments]]</code>, за якими йдуть аргументи, передані викликом функції.</p> - -<p>Зв'язана функція може також бути створена за допомогою оператора {{jsxref("Operators/new", "new")}}: це працює так, якби замість неї створювалася б цільова функція. Передане значення <code>this</code> ігнорується, а передані аргументи передаються до імітованої функції.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Створення_звязаної_функції">Створення зв'язаної функції</h3> - -<p>Найпростіше використання методу <code>bind()</code> - це зробити функцію, яка, незалежно від того, як вона викликається, буде викликатися з конкретним значенням <code>this</code>. Загальною помилкою початківців у JavaScript є витягнути метод з об'єкта, пізніше викликати цю функцію і очікувати, що вона буде використовувати початковий об'єкт в якості <code>this</code> (наприклад, використовуючи цей метод в коді на основі зворотних викликів). Однак, початковий об'єкт, якщо його не відслідковувати, зазвичай, втрачається. Створення зв'язаної функції з функції, яка використовує початковий об'єкт, елегантно вирішує цю проблему:</p> - -<pre class="brush: js">this.x = 9; // тут значення this посилається на глобальний об'єкт переглядача "window" -var module = { - x: 81, - getX: function() { return this.x; } -}; - -module.getX(); // 81 - -var retrieveX = module.getX; -retrieveX(); -// вертає 9 - Функція виконується в глобальній області видимості - -// Створюємо нову функцію, прив'язуючи 'this' до об'єкта module -// Програмісти-новачки можуть переплутати -// глобальну змінну var x з властивістю x об'єкта module -var boundGetX = retrieveX.bind(module); -boundGetX(); // 81 -</pre> - -<h3 id="Частково_застосовані_функції">Частково застосовані функції</h3> - -<p>Наступне найпростіше використання методу <code>bind()</code> - це зробити функцію з наперед визначеними початковими аргументами. Ці аргументи (якщо вони є) вказуються після наданого значення <code>this</code> і після цього передаються на початку списку аргументів, які передаються в дану функцію. За ними йдуть аргументи, передані у зв'язану функцію під час виклику.</p> - -<pre class="brush: js">function list() { - return Array.prototype.slice.call(arguments); -} - -function addArguments(arg1, arg2) { - return arg1 + arg2 -} - -var list1 = list(1, 2, 3); // [1, 2, 3] - -var result1 = addArguments(1, 2); // 3 - -// Створити функцію з попередньо заданим першим аргументом -var leadingThirtysevenList = list.bind(null, 37); - -// Створити функцію з попередньо заданим першим аргументом. -var addThirtySeven = addArguments.bind(null, 37); - -var list2 = leadingThirtysevenList(); -// [37] - -var list3 = leadingThirtysevenList(1, 2, 3); -// [37, 1, 2, 3] - -var result2 = addThirtySeven(5); -// 37 + 5 = 42 - -var result3 = addThirtySeven(5, 10); -// 37 + 5 = 42, другий аргумент ігнорується</pre> - -<h3 id="З_setTimeout">З <code>setTimeout</code></h3> - -<p>За замовчуванням, всередині {{domxref("WindowTimers/setTimeout", "window.setTimeout()")}} значенням <code>this</code> буде встановлено об'єкт {{domxref("window")}} (або <code>global</code>). Працюючи з методами класу, що вимагають <code>this</code> для посилання на екземпляри класу, ви можете явно прив'язати <code>this</code> до функції зворотного виклику, щоб зберегти екземпляр.</p> - -<pre class="brush: js">function LateBloomer() { - this.petalCount = Math.ceil(Math.random() * 12) + 1; -} - -// Запустити declare після затримки у 1 секунду -LateBloomer.prototype.bloom = function() { - window.setTimeout(this.declare.bind(this), 1000); -}; - -LateBloomer.prototype.declare = function() { - console.log('Я чудова квітка з ' + - this.petalCount + ' пелюстками!'); -}; - -var flower = new LateBloomer(); -flower.bloom(); -// через 1 секунду запускається метод 'declare'</pre> - -<h3 id="Звязані_функції_в_ролі_конструкторів">Зв'язані функції в ролі конструкторів</h3> - -<div class="warning"> -<p><strong>Застереження:</strong> Цей розділ демонструє можливості JavaScript та документує деякі граничні випадки використання методу <code>bind()</code>. Методи, наведені нижче, є не найкращим способом написання коду, їх не бажано використовувати у будь-якому виробничому середовищі.</p> -</div> - -<p>Зв'язані функції автоматично підходять для використання з оператором {{jsxref("Operators/new", "new")}} для побудови нових екземплярів, створених цільовою функцією. Коли зв'язана функція використовується для створення значення, надане значення <code>this</code> ігнорується. Однак, надані аргументи все одно передаються у виклик конструктора:</p> - -<pre class="brush: js">function Point(x, y) { - this.x = x; - this.y = y; -} - -Point.prototype.toString = function() { - return this.x + ',' + this.y; -}; - -var p = new Point(1, 2); -p.toString(); // '1,2' - -// не підтримується у поліфілі, що наведений нижче - -// працює добре з рідним методом bind: - -var YAxisPoint = Point.bind(null, 0/*x*/); - - -var emptyObj = {}; -var YAxisPoint = Point.bind(emptyObj, 0/*x*/); - -var axisPoint = new YAxisPoint(5); -axisPoint.toString(); // '0,5' - -axisPoint instanceof Point; // true -axisPoint instanceof YAxisPoint; // true -new Point(17, 42) instanceof YAxisPoint; // true -</pre> - -<p>Зауважте, що вам не потрібно робити нічого особливого, щоб створити зв'язану функцію для використання з оператором {{jsxref("Operators/new", "new")}}. Наслідком є те, що вам не потрібно робити нічого особливого, щоб створити зв'язану функцію, яка буде просто викликатися, навіть якщо ви хотіли б зв'язати функцію лише для викликів з оператором {{jsxref("Operators/new", "new")}}.</p> - -<pre class="brush: js">// Приклад може бути запущений прямо у консолі JavaScript -// ...продовження прикладу нагорі - -// Може викликатись як звичайна функція -// (хоча зазвичай це є небажаним) -YAxisPoint(13); - -emptyObj.x + ',' + emptyObj.y; -// > '0,13' -</pre> - -<p>Якщо ви бажаєте підтримувати використання зв'язаної функції лише з оператором {{jsxref("Operators/new", "new")}}, або лише викликаючи її, то цільова функція має примусово ввести це обмеження.</p> - -<h3 id="Створення_ярликів">Створення ярликів</h3> - -<p>Метод <code>bind()</code> також є корисним у випадках, коли ви хочете створити ярлик до функції, котра потребує конкретного значення <code>this</code>.</p> - -<p>Візьміть, для прикладу, метод {{jsxref("Array.prototype.slice")}}, який ви хочете використати для перетворення подібного до масиву об'єкта на справжній масив. Ви можете створити такий ярлик:</p> - -<pre class="brush: js">var slice = Array.prototype.slice; - -// ... - -slice.apply(arguments); -</pre> - -<p>З <code>bind()</code> це можна спростити. В наступній частині коду, <code>slice</code> є зв'язаною функцією з функцією {{jsxref("Function.prototype.apply()", "apply()")}} об'єкта {{jsxref("Function.prototype")}}, зі значенням <code>this</code>, яке дорівнює функції {{jsxref("Array.prototype.slice()", "slice()")}} об'єкта {{jsxref("Array.prototype")}}. Це означає що додаткові виклики методу <code>apply()</code> можуть бути усунені:</p> - -<pre class="brush: js">// те саме, що й "slice" у попередньому прикладі -var unboundSlice = Array.prototype.slice; -var slice = Function.prototype.apply.bind(unboundSlice); - -// ... - -slice(arguments); -</pre> - -<h2 id="Поліфіл">Поліфіл</h2> - -<p>Оскільки старші переглядачі, загалом, є також повільнішими, набагато критичніше, ніж багатьом здається, створювати продуктивні поліфіли, щоб користування переглядачем не було таким жахливим. Отже, нижче наведені два варіанти поліфілів Function.prototype.bind. Перший набагато менший та спритніший, але не працює при використанні оператора `new`. Другий менш продуктивний та більший за розміром, але дозволяє певне використання оператора `new` на зв'язаних функціях. Загалом, у коді рідко можна зустріти `new`, що використовується на зв'язаній функції, тому, в цілому, краще обирати перший варіант.</p> - -<pre class="brush: js">// Не працює з `new funcA.bind(thisArg, args)` -if (!Function.prototype.bind) (function(){ - var slice = Array.prototype.slice; - Function.prototype.bind = function() { - var thatFunc = this, thatArg = arguments[0]; - var args = slice.call(arguments, 1); - if (typeof thatFunc !== 'function') { - // найближчий можливий варіант до внутрішньої - // функції IsCallable у ECMAScript 5 - throw new TypeError('Function.prototype.bind - ' + - 'what is trying to be bound is not callable'); - } - return function(){ - var funcArgs = args.concat(slice.call(arguments)) - return thatFunc.apply(thatArg, funcArgs); - }; - }; -})();</pre> - -<p>Ви можете це частково обійти, вставивши наступний код на початку ваших скриптів, що дозволить використовувати більшу частину функціональності <code>bind()</code> у реалізаціях, які початково її не підтримують.</p> - -<pre class="brush: js">// Так, це працює з `new funcA.bind(thisArg, args)` -if (!Function.prototype.bind) (function(){ - var ArrayPrototypeSlice = Array.prototype.slice; - Function.prototype.bind = function(otherThis) { - if (typeof this !== 'function') { - // найближчий можливий варіант до внутрішньої - // функції IsCallable у ECMAScript 5 - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - - var baseArgs= ArrayPrototypeSlice .call(arguments, 1), - baseArgsLength = baseArgs.length, - fToBind = this, - fNOP = function() {}, - fBound = function() { - baseArgs.length = baseArgsLength; // скинути до початкових базових аргументів - baseArgs.push.apply(baseArgs, arguments); - return fToBind.apply( - fNOP.prototype.isPrototypeOf(this) ? this : otherThis, baseArgs - ); - }; - - if (this.prototype) { - // Function.prototype не має властивості prototype - fNOP.prototype = this.prototype; - } - fBound.prototype = new fNOP(); - - return fBound; - }; -})();</pre> - -<p>Деякі з багатьох відмінностей (також можуть бути й інші, оскільки цей список не претендує на вичерпність) між цим алгоритмом та основним алгоритмом:</p> - -<ul> - <li>Часткова реалізація покладається на те, що вбудовані методи {{jsxref("Array.prototype.slice()")}}, {{jsxref("Array.prototype.concat()")}}, {{jsxref("Function.prototype.call()")}} та {{jsxref("Function.prototype.apply()")}} мають свої початкові значення.</li> - <li>Часткова реалізація створює функції, які не мають незмінної "отруйної таблетки" {{jsxref("Function.caller", "caller")}} та властивостей <code>arguments</code>, що викидають помилку {{jsxref("Global_Objects/TypeError", "TypeError")}} на get, set чи видалення. (Це можна додати, якщо реалізація підтримує {{jsxref("Object.defineProperty")}}, або частково реалізувати [без викидання винятків на видалення], якщо реалізація підтримує розширення {{jsxref("Object.__defineGetter__", "__defineGetter__")}} та {{jsxref("Object.__defineSetter__", "__defineSetter__")}}.)</li> - <li>Часткова реалізація створює функції, які мають властивість <code>prototype</code>. (Правильні зв'язані функції її не мають.)</li> - <li>Часткова реалізація створює зв'язані функції, чия властивість {{jsxref("Function.length", "length")}} не узгоджується з встановленою у ECMA-262: вона створює функції зі значенням length 0, в той час, як повна реалізація, в залежності від значення length цільової функції та числа попередньо заданих аргументів, може повернути ненульове значення.</li> -</ul> - -<p>Якщо ви вирішили використовувати цю часткову реалізацію, <strong>ви не повинні покладатися на неї у ситуаціях, де її поведінка відрізняється від 5-ї версії ECMA-262!</strong> На щастя, ці відхилення від специфікації не часто (якщо взагалі) зустрічаються у більшості випадків кодування. Якщо ви не розумієте жодних відхилень від специфікації, наведених вище, тоді, у цьому конкретному випадку, буде безпечно не хвилюватись щодо подробиць цих невідповідностей.</p> - -<p><strong>Якщо це абсолютно необхідно, а продуктивність неважлива</strong>, значно повільніше рішення (але у більшій відповідності до специфікації) можна знайти тут <a href="https://github.com/Raynos/function-bind">https://github.com/Raynos/function-bind</a>.</p> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.3.4.5', 'Function.prototype.bind')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td>Початкове визначення. Реалізовано у 1.8.5.</td> - </tr> - <tr> - <td>{{SpecName('ES2015', '#sec-function.prototype.bind', 'Function.prototype.bind')}}</td> - <td>{{Spec2('ES2015')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function.prototype.bind', 'Function.prototype.bind')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div class="hidden"> -<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> -</div> - -<p>{{Compat("javascript.builtins.Function.bind")}}</p> - -<div id="compat-mobile"></div> - -<h2 id="Дивіться_також">Дивіться також</h2> - -<ul> - <li>{{jsxref("Function.prototype.apply()")}}</li> - <li>{{jsxref("Function.prototype.call()")}}</li> - <li>{{jsxref("Functions", "Функції", "", 1)}}</li> -</ul> 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 deleted file mode 100644 index caa12e71b0..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/call/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -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 ---- -<div>{{JSRef}}</div> - -<p>Метод <code><strong>call()</strong></code> викликає функцію із вказаним значенням <code>this</code> та зазначеним переліком аргументів.</p> - -<div class="note"> -<p><strong>Заувага:</strong> Хоча за своїм призначенням цей метод і {{jsxref("Function.prototype.apply", "apply()")}} є тотожними, аргументи для викликаної функції передаються в дещо різний спосіб: метод <code>call()</code> приймає їх <strong>перелік</strong>, тоді як метод <code>apply()</code> приймає їх <strong>масив</strong>.</p> -</div> - -<div>{{EmbedInteractiveExample("pages/js/function-call.html")}}</div> - -<p class="hidden">Першокод цього прикладу збережено у репозиторії GitHub. Якщо ви хочете долучитися до створення чи поліпшення таких прикладів, пропонуйте нам свої зміни до репозиторію <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a>.</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><code><var>function</var>.call(<var>thisArg</var>[, <var>arg1</var>[, <var>arg2</var>[, ...]]])</code></pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>thisArg</code> {{optional_inline}}</dt> - <dd>Значення <code>this</code>, яке буде застосовано для виклику <code>function</code>. Зауважте, що значення <code>thisArg</code> може зазнати перетворень — якщо функція <code>function</code> виконується у {{jsxref("Functions_and_function_scope/Strict_mode", "поблажливому режимі", "", 1)}}, тоді замість {{jsxref("Global_Objects/null", "null")}} та {{jsxref("Global_Objects/undefined", "undefined")}} буде застосовано {{glossary("Global_object", "глобальний об'єкт")}}, а {{glossary("Primitive", "прості величини")}} буде обернено на об'єкти.</dd> - <dt><code>arg1, arg2, ...</code> {{optional_inline}}</dt> - <dd>Аргументи, що їх буде передано до функції <code>function</code>.</dd> -</dl> - -<h3 id="Вертає">Вертає</h3> - -<p>Значення, яке внаслідок виклику повернула сама функція <code>function</code>.</p> - -<h2 id="Опис">Опис</h2> - -<p>Метод <code>call()</code> здійснює виклик функції, заступаючи значення ключового слова <code>this</code> всередині неї значенням, переданим до <code>call()</code> як перший аргумент. Це уможливлює одноразове написання деякої функції з можливістю її надалі викликати для всякого об'єкта так, наче вона є його методом.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Виклик_успадкованих_конструкторів_за_допомогою_call">Виклик успадкованих конструкторів за допомогою <code>call</code></h3> - -<p>Методом <code>call()</code> можна скористатись для створення ланцюжка конструкторів об'єкта, як у Java. У наведеному прикладі конструктор <code>Product</code> (виріб) має два параметри: назву (<code>name</code>) й ціну (<code>price</code>). Два інші конструктори — <code>Food</code> (їжа) і <code>Toy</code> (цяцька) — спершу викликають конструктор <code>Product</code>, передаючи потрібні йому значення <code>name</code> і <code>price</code>, а відтак додають окрему властивість <code>category</code> (різновид).</p> - -<pre class="brush: js">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); -</pre> - -<h3 id="Виклик_неназваних_функцій_за_допомогою_метода_call">Виклик неназваних функцій за допомогою метода <code>call</code></h3> - -<p>Цей суто надуманий приклад містить використання метода <code>call</code> для виклику анонімної функції на кожному об'єкті з масиву.</p> - -<p>Всередині цієї анонімної функції кожен об'єкт отримує окремий метод <code>print</code>, що друкуватиме значення властивостей об'єкта та його розташунок (індекс) в масиві. Передача об'єкта саме як <code>this</code> не є необхідністю, а вжито лише задля наочності.</p> - -<pre class="brush: 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); -} -</pre> - -<h3 id="Виклик_функції_та_перевиознака_this_за_допомогою_метода_call">Виклик функції та перевиознака <code>this</code> за допомогою метода <code>call</code></h3> - -<p>Під час виклику функції <code>greet</code> в цьому прикладі значення <code>this</code> буде прив'язано до об'єкта <code>obj</code>:</p> - -<pre class="brush: js">function greet() { - var message = 'Вітаємо, ' + (this.isMale ? 'пане ' : 'пані ') + this.name; - console.log(message); -} - -var obj = { - isMale: false, name: 'Олено' -}; - -greet.call(obj); // Вітаємо, пані Олено -</pre> - -<h3 id="Виклик_функції_за_допомогою_метода_call_без_зазначення_першого_аргумента">Виклик функції за допомогою метода <code>call</code> без зазначення першого аргумента</h3> - -<p>Як засвідчує цей приклад, відсутність першого аргумента метода <code>call</code> має наслідком прив'язування <code>this</code> до {{glossary('global object', 'глобального об\'єкта')}}:</p> - -<pre class="brush: js">var name = 'Тарас'; - -var x = { - name: 'Микола', - display: function() { - console.log('Мене звуть ' + this.name); - } -}; - -x.display(); // Мене звуть Микола -x.display.call(); // Мене звуть Тарас -</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкова виознака. Запроваджено у JavaScript 1.3.</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}</td> - <td>{{Spec2('ES6')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2> - -<div class="hidden">Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div> - -<div>{{Compat("javascript.builtins.Function.call")}}</div> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Function.prototype.bind()")}}</li> - <li>{{jsxref("Function.prototype.apply()")}}</li> - <li> - <p><a href="/uk/docs/Learn/JavaScript/Objects">Вступ до об'єктів JavaScript</a></p> - </li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/caller/index.html b/files/uk/web/javascript/reference/global_objects/function/caller/index.html deleted file mode 100644 index ab2fe55383..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/caller/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Function.caller -slug: Web/JavaScript/Reference/Global_Objects/Function/caller -tags: - - Function - - JavaScript - - Властивість -translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller ---- -<div>{{JSRef}} {{non-standard_header}}</div> - -<p>Властивість <code><strong><em>function</em>.caller</strong></code> повертає функцію, яка викликала вказану функцію. Ця властивість заборонена у строгому режимі.</p> - -<h2 id="Опис">Опис</h2> - -<p>Якщо функція <code>f</code> викликана кодом верхнього рівня, значенням <code>f.caller</code> буде {{jsxref("null")}}, інакше це буде функція, яка викликала <code>f</code>.</p> - -<p>Ця властивість замінює застарілу властивість {{jsxref("Functions/arguments/caller", "arguments.caller")}} об'єкта {{jsxref("Functions/arguments", "arguments")}}.</p> - -<p>Спеціальна властивість <code>__caller__</code>, яка повертала об'єкт активації функції, що викликала задану функцію, дозволяючи відбудовувати стек викликів, була прибрана з міркувань безпеки.</p> - -<h3 id="Примітки">Примітки</h3> - -<p>Зауважте, що у випадку рекурсії ви не зможете відбудувати стек викликів за допомогою цієї властивості. Розглянемо:</p> - -<pre class="brush: js">function f(n) { g(n - 1); } -function g(n) { if (n > 0) { f(n); } else { stop(); } } -f(2); -</pre> - -<p>У момент, коли викликається <code>stop()</code>, стек викликів буде таким:</p> - -<pre class="brush: js">f(2) -> g(1) -> f(1) -> g(0) -> stop() -</pre> - -<p>Наступне дорівнює true:</p> - -<pre class="brush: js">stop.caller === g && f.caller === g && g.caller === f -</pre> - -<p>Отже, якщо ви спробуєте отримати стек викликів у функції <code>stop()</code> ось так:</p> - -<pre class="brush: js">var f = stop; -var stack = 'Стек викликів:'; -while (f) { - stack += '\n' + f.name; - f = f.caller; -} -</pre> - -<p>цикл ніколи не зупиниться.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Перевірка_значення_властивості_функції_caller">Перевірка значення властивості функції <code>caller</code></h3> - -<p>Наступний код перевіряє значення властивості функції <code>caller</code>.</p> - -<pre class="brush: js">function myFunc() { - if (myFunc.caller == null) { - return 'Ця функція викликана з верхнього рівня!'; - } else { - return 'Ця функція викликана ' + myFunc.caller; - } -} -</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<p>Не є частиною жодних специфікацій. Реалізовано у JavaScript 1.5.</p> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.builtins.Function.caller")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>Помилка реалізації для SpiderMonkey {{bug(65683)}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/displayname/index.html b/files/uk/web/javascript/reference/global_objects/function/displayname/index.html deleted file mode 100644 index 1e18f4a98c..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/displayname/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Function.displayName -slug: Web/JavaScript/Reference/Global_Objects/Function/displayName -tags: - - Function - - JavaScript - - Властивість - - нестандартна -translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName ---- -<div>{{JSRef}} {{non-standard_header}}</div> - -<p>Властивість <code><strong><em>function</em>.displayName</strong></code> повертає ім'я, що відображається для функції.</p> - -<h2 id="Опис">Опис</h2> - -<p>Властивість <code>displayName</code>, якщо вона вказана, повертає ім'я, яке відображається для функції:</p> - -<pre class="brush: js">function doSomething() {} - -console.log(doSomething.displayName); // "undefined" - -var popup = function(content) { console.log(content); }; - -popup.displayName = 'Показати спливаюче вікно'; - -console.log(popup.displayName); // "Показати спливаюче вікно" -</pre> - -<p>Ви можете визначити функцію з ім'ям, яке відображається, у {{jsxref("Functions", "функціональному виразі", "", 1)}}:</p> - -<pre class="brush: js">var object = { - someMethod: function() {} -}; - -object.someMethod.displayName = 'someMethod'; - -console.log(object.someMethod.displayName); // виводить "someMethod" - -try { someMethod } catch(e) { console.log(e); } -// ReferenceError: someMethod is not defined -</pre> - -<p>Ви можете динамічно змінювати властивість <code>displayName</code>:</p> - -<pre class="brush: js">var object = { - // анонімна - someMethod: function(value) { - arguments.callee.displayName = 'мій метод (' + value + ')'; - } -}; - -console.log(object.someMethod.displayName); // "undefined" - -object.someMethod('123') -console.log(object.someMethod.displayName); // "мій метод (123)" -</pre> - -<h2 id="Приклади">Приклади</h2> - -<p>Консолі та профайлери зазвичай використовують цю властивість замість {{jsxref("Function.name", "func.name")}} для відображення імені функції.</p> - -<p>Записавши наведений код у консоль, ви маєте побачити щось на кшталт "<code>function My Function()</code>":</p> - -<pre class="brush: js">var a = function() {}; -a.displayName = 'My Function'; - -a; // "function My Function()"</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<p>Не є частиною жодних специфікацій.</p> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Function.displayName")}}</p> -</div> diff --git a/files/uk/web/javascript/reference/global_objects/function/index.html b/files/uk/web/javascript/reference/global_objects/function/index.html deleted file mode 100644 index f2672fe180..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/index.html +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Function -slug: Web/JavaScript/Reference/Global_Objects/Function -tags: - - Constructor - - Function - - JavaScript -translation_of: Web/JavaScript/Reference/Global_Objects/Function ---- -<div>{{JSRef}}</div> - -<p><strong>Конструктор <code>Function</code></strong> створює новий <strong>об'єкт</strong> <code>Function</code>. Прямий виклик конструктора може створювати функції динамічно, але має проблеми з безпекою та схожі з {{jsxref("eval")}} (але менш значні) проблеми з продуктивністю. Однак, на відміну від eval, конструктор Function створює функції, які виконуються тільки у глобальній області видимості.</p> - -<p>{{EmbedInteractiveExample("pages/js/function-constructor.html")}}</p> - -<div class="hidden"> -<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> -</div> - -<p>У JavaScript кожна функція є об'єктом <code>Function</code>. Це можна побачити за допомогою коду <code>(function(){}).constructor === Function</code>, який повертає true.</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><code>new Function ([<var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]],] <var>functionBody</var>)</code></pre> - -<h3 id="Параметри">Параметри</h3> - -<dl> - <dt><code>arg1, arg2, ... arg<em>N</em></code></dt> - <dd>Імена, які будуть використані функцією в якості імен формальних аргументів. Кожне ім'я має бути рядком, який представляє ідентифікатор JavaScript, або списком таких рядків, розділених комою; наприклад, "<code>x</code>", "<code>theValue</code>" або "<code>a,b</code>".</dd> - <dt><code>functionBody</code></dt> - <dd>Рядок, що містить інструкції JavaScript, які складають визначення функції.</dd> -</dl> - -<h2 id="Опис">Опис</h2> - -<p>Об'єкти <code>Function</code>, створені конструктором <code>Function</code>, аналізуються, коли створюється функція. Це менш ефективно, ніж оголошувати функцію <a href="/uk/docs/Web/JavaScript/Reference/Operators/function">функціональним виразом</a> або <a href="/uk/docs/Web/JavaScript/Reference/Statements/function">оголошенням функції</a> та викликати її, бо такі функції аналізуються разом з рештою коду.</p> - -<p>Усі аргументи, передані у функцію, сприймаються як імена ідентифікаторів параметрів функції, що має бути створена, в тому порядку, в якому вони передані.</p> - -<p>Виклик конструктора <code>Function</code> у вигляді функції (без оператора <code>new</code>) має той самий ефект, що й виклик конструктора.</p> - -<h2 id="Властивості_та_методи_обєкта_Function">Властивості та методи об'єкта <code>Function</code></h2> - -<p>Глобальний об'єкт <code>Function</code> не має власних методів та властивостей, однак, він успадковує деякі методи та властивості через ланцюжок прототипів від {{jsxref("Function.prototype")}}.</p> - -<h2 id="Обєкт_прототипу_Function">Об'єкт прототипу <code>Function</code></h2> - -<h3 id="Властивості">Властивості</h3> - -<div>{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Властивості')}}</div> - -<h3 id="Методи">Методи</h3> - -<div>{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Методи')}}</div> - -<h2 id="Екземпляри_Function">Екземпляри <code>Function</code></h2> - -<p>Екземпляри <code>Function</code> успадковують методи та властивості від {{jsxref("Function.prototype")}}. Як і в усіх конструкторах, ви можете змінити об'єкт прототипу конструктора, щоб внести зміни до усіх екземплярів <code>Function</code>.</p> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Визначення_аргументів_у_конструкторі_Function">Визначення аргументів у конструкторі <code>Function</code></h3> - -<p>Наступний код створює об'єкт <code>Function</code>, що приймає два аргументи.</p> - -<pre class="brush: js">// Цей приклад можна запустити прямо у консолі JavaScript - -// Створити функцію, що приймає два аргументи та повертає суму цих аргументів -var adder = new Function('a', 'b', 'return a + b'); - -// Виклик функції -adder(2, 6); -// > 8 -</pre> - -<p>Аргументи "<code>a</code>" та "<code>b</code>" є іменами формальних аргументів, які використовуються у тілі функції, "<code>return a + b</code>".</p> - -<h3 id="Різниця_між_конструктором_Function_та_оголошенням_функції">Різниця між конструктором Function та оголошенням функції</h3> - -<p>Функції, створені конструктором <code>Function</code>, не утворюють замикань з контекстом свого cтворення; вони завжди cтворюються у глобальній області видимості. Під час виконання вони матимуть доступ лише до власних локальних змінних та глобальних змінних, а не до змінних з області видимості, де був створений конструктор <code>Function</code>. Це відрізняється від {{jsxref("eval")}} з кодом функціонального виразу.</p> - -<pre class="brush: js">var x = 10; - -function createFunction1() { - var x = 20; - return new Function('return x;'); // цей |x| звертається до глобального |x| -} - -function createFunction2() { - var x = 20; - function f() { - return x; // цей |x| звертається до локального |x|, записаного вище - } - return f; -} - -var f1 = createFunction1(); -console.log(f1()); // 10 -var f2 = createFunction2(); -console.log(f2()); // 20</pre> - -<p>В той час, як цей код працює у веб-переглядачах, <code>f1()</code> спричинить <code>ReferenceError</code> у Node.js, через те, що <code>x</code> не буде знайдено. Це відбувається тому, що область видимості верхнього рівня у Node не є глобальною областю видимості, і <code>x</code> буде локальною змінною модуля.</p> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкове визначення. Реалізоване у JavaScript 1.0.</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.3', 'Function')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-function-objects', 'Function')}}</td> - <td>{{Spec2('ES6')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div class="hidden"> -<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> -</div> - -<p>{{Compat("javascript.builtins.Function")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Functions", "Функції та область видимості функції")}}</li> - <li>{{jsxref("Function")}}</li> - <li>{{jsxref("Statements/function", "оголошення функції")}}</li> - <li>{{jsxref("Operators/function", "функціональний вираз")}}</li> - <li>{{jsxref("Statements/function*", "function* statement")}}</li> - <li>{{jsxref("Operators/function*", "function* expression")}}</li> - <li>{{jsxref("GeneratorFunction")}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/length/index.html b/files/uk/web/javascript/reference/global_objects/function/length/index.html deleted file mode 100644 index b5968dd976..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/length/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Function.length -slug: Web/JavaScript/Reference/Global_Objects/Function/length -tags: - - Function - - JavaScript - - Властивість -translation_of: Web/JavaScript/Reference/Global_Objects/Function/length ---- -<div>{{JSRef}}</div> - -<p>Властивість <code><strong>length</strong></code> зазначає кількість параметрів, очікуваних функцією.</p> - -<div>{{EmbedInteractiveExample("pages/js/function-length.html")}}</div> - - - -<div>{{js_property_attributes(0,0,1)}}</div> - -<h2 id="Опис">Опис</h2> - -<p><code>length</code> - це властивість функціонального об'єкта, вона вказує, скільки аргументів очікує функція, тобто кількість формальних параметрів. Ця кількість не включає {{jsxref("rest_parameters", "залишкові параметри", "", 1)}}, і рахує лише параметри до першого, що має значення по замовчуванню. Для контрасту, властивість {{jsxref("Functions/arguments/length", "arguments.length")}} є локальною властивістю функції, і надає кількість аргументів, що фактично передані у функцію.</p> - -<h3 id="Властивість_конструктора_Function">Властивість конструктора Function</h3> - -<p>Конструктор {{jsxref("Function")}} теж є об'єктом {{jsxref("Function")}}. Його властивість <code>length</code> має значення 1. Атрибути властивості такі: Writable (доступний для запису): <code>false</code>, Enumerable (доступний для переліку): <code>false</code>, Configurable (доступний для налаштування): <code>true</code>.</p> - -<h3 id="Властивість_об'єкта_прототипу_Function">Властивість об'єкта прототипу Function</h3> - -<p>Властивість об'єкта прототипу {{jsxref("Function")}} має значення 0.</p> - -<h2 id="Приклади">Приклади</h2> - -<pre class="brush: js">console.log(Function.length); /* 1 */ - -console.log((function() {}).length); /* 0 */ -console.log((function(a) {}).length); /* 1 */ -console.log((function(a, b) {}).length); /* 2 і т.д. */ - -console.log((function(...args) {}).length); -// 0, залишкові параметри не рахуються - -console.log((function(a, b = 1, c) {}).length); -// 1, рахуються тільки параметри, розташовані до першого, -// який має значення за замовчуванням</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкове визначення. Реалізоване у JavaScript 1.1.</td> - </tr> - <tr> - <td>{{SpecName('ES5.1', '#sec-15.3.5.1', 'Function.length')}}</td> - <td>{{Spec2('ES5.1')}}</td> - <td></td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-function-instances-length', 'Function.length')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Атрибут <code>configurable</code> цієї властивості тепер дорівнює <code>true</code>.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function-instances-length', 'Function.length')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Function.length")}}</p> -</div> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Function")}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/name/index.html b/files/uk/web/javascript/reference/global_objects/function/name/index.html deleted file mode 100644 index 9fa89c9f14..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/name/index.html +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Function.name -slug: Web/JavaScript/Reference/Global_Objects/Function/name -tags: - - ECMAScript 2015 - - Function - - JavaScript - - Властивість -translation_of: Web/JavaScript/Reference/Global_Objects/Function/name ---- -<div>{{JSRef}}</div> - -<p>Властивість тільки для читання об'єкта {{jsxref("Function")}} <code><strong>name</strong></code> відображає ім'я функції, яке було вказане при створенні, або <code>"anonymous"</code> для анонімних функцій.</p> - -<p>{{EmbedInteractiveExample("pages/js/function-name.html")}}</p> - -<div class="hidden"> -<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> -</div> - -<p>{{js_property_attributes(0,0,1)}}</p> - -<div class="blockIndicator note"> -<p>Зауважте, що у нестандартних реалізаціях до ES2015 атрибут <code>configurable</code> (доступний для налаштування) також мав значення <code>false</code>.</p> -</div> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Ім'я_функції">Ім'я функції</h3> - -<p>Властивість <code>name</code> повертає ім'я функції.</p> - -<pre class="brush: js">function doSomething() {} -console.log(doSomething.name); // "doSomething" -</pre> - -<h3 id="Ім'я_конструктора_функції">Ім'я конструктора функції</h3> - -<p>Функції, створені за допомогою <code>new Function(...)</code> або просто <code>Function(...)</code> створюють об'єкти {{jsxref("Function")}}, а їхнє ім'я "anonymous".</p> - -<pre class="brush: js">(new Function).name; // "anonymous"</pre> - -<h3 id="Виведені_імена_функцій">Виведені імена функцій</h3> - -<p>Змінні та методи можуть вивести ім'я анонімної функції з її синтаксичної позиції (нове у ECMAScript 2015).</p> - -<pre class="brush: js">var f = function() {}; -var object = { - someMethod: function() {} -}; - -console.log(f.name); // "f" -console.log(object.someMethod.name); // "someMethod" -</pre> - -<p>Ви можете оголосити функцію з ім'ям у {{jsxref("Operators/Function", "функціональному виразі", "", 1)}}:</p> - -<pre class="brush: js">var object = { - someMethod: function object_someMethod() {} -}; -console.log(object.someMethod.name); // виведе "object_someMethod" - -try { object_someMethod } catch(e) { console.log(e); } -// ReferenceError: object_someMethod is not defined -</pre> - -<p>Ви не можете змінювати ім'я функції, ця властивість доступна лише для читання:</p> - -<div class="hidden"> -<p>Наведений нижче приклад суперечить тому, що сказано на початку цього розділу і не працює як описано.</p> -</div> - -<pre class="brush: js">var object = { - // anonymous - someMethod: function() {} -}; - -object.someMethod.name = 'otherMethod'; -console.log(object.someMethod.name); // someMethod -</pre> - -<p>Однак, щоб змінити її, ви можете скористатись {{jsxref("Object.defineProperty()")}}.</p> - -<h3 id="Імена_лаконічних_методів">Імена лаконічних методів</h3> - -<pre class="brush: js">var o = { - foo(){} -}; -o.foo.name; // "foo";</pre> - -<h3 id="Імена_зв'язаних_функцій">Імена зв'язаних функцій</h3> - -<p>Метод {{jsxref("Function.bind()")}} створює функцію, чиїм ім'ям буде "bound" плюс ім'я функції.</p> - -<pre class="brush: js">function foo() {}; -foo.bind({}).name; // "bound foo"</pre> - -<h3 id="Імена_функцій_для_гетерів_та_сетерів">Імена функцій для гетерів та сетерів</h3> - -<p>При використанні властивостей-аксесорів <code><a href="/uk/docs/Web/JavaScript/Reference/Functions/get">get</a></code> та <code><a href="/uk/docs/Web/JavaScript/Reference/Functions/set">set</a></code> у імені функції з'являється "get" або "set".</p> - -<pre class="brush: js">let o = { - get foo(){}, - set foo(x){} -}; - -var descriptor = Object.getOwnPropertyDescriptor(o, "foo"); -descriptor.get.name; // "get foo" -descriptor.set.name; // "set foo";</pre> - -<h3 id="Імена_функцій_у_класах">Імена функцій у класах</h3> - -<p>Ви можете скористатись <code>obj.constructor.name</code>, щоб перевірити "клас" об'єкта (але обов'язково прочитайте застереження нижче):</p> - -<pre class="brush: js">function Foo() {} // Синтаксис ES2015: class Foo {} - -var fooInstance = new Foo(); -console.log(fooInstance.constructor.name); // виводить "Foo"</pre> - -<div class="blockIndicator warning"> -<p><strong>Застереження:</strong> Інтерпретатор коду встановить значення вбудованої властивості <code>Function.name</code> тільки якщо функція не має своєї властивості з назвою <em>name</em> (дивіться розділ <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-setfunctionname">9.2.11 ECMAScript2015 Language Specification</a>). Однак, ES2015 визначає ключове слово <em>static</em> таким чином, що статичні методі встановлюються як OwnProperty функції-конструктора класу (ECMAScript2015, <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics-classdefinitionevaluation">14.5.14.21.b</a>+ <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer-runtime-semantics-propertydefinitionevaluation">12.2.6.9</a>).</p> -</div> - -<p>І тому ми не можемо отримати ім'я класу фактично для жодного класу, що має статичний метод <code>name()</code>:</p> - -<pre class="brush: js">class Foo { - constructor() {} - static name() {} -}</pre> - -<p>З методом <code>static name()</code>, <code>Foo.name</code> тепер містить не ім'я класу, а посилання на функцію <code>name()</code>. Наведене вище оголошення класу у синтаксисі ES2015 буде поводитись у Chrome чи Firefox схоже на наступний фрагмент коду у синтаксисі ES5:</p> - -<pre class="brush: js">function Foo() {} -Object.defineProperty(Foo, 'name', { writable: true }); -Foo.name = function() {};</pre> - -<p>Спроба отримати клас <code>fooInstance</code> через <code>fooInstance.constructor.name</code> поверне нам зовсім не ім'я класу, а посилання на статичний метод класу. Приклад:</p> - -<pre class="brush: js">let fooInstance = new Foo(); -console.log(fooInstance.constructor.name); // виводить function name()</pre> - -<p>Ви могли також побачити у прикладі з синтаксисом ES5, що у Chrome чи Firefox наше статичне оголошення <code>Foo.name</code> стає <em>доступним для запису</em>. Вбудоване оголошення за відсутності користувацького статичного методу є <em>доступним лише для читання</em>:</p> - -<pre class="brush: js">Foo.name = 'Привіт'; -console.log(Foo.name); -// виведе "Привіт", якщо клас має статичну властивість name(), інакше виведе "Foo".</pre> - -<p>Таким чином, не можна розраховувати, що вбудована властивість <code>Function.name</code> завжди міститиме ім'я класу.</p> - -<h3 id="Символи_в_якості_імен_функцій">Символи в якості імен функцій</h3> - -<p>Якщо {{jsxref("Symbol")}} використовується в якості імені функції і має опис, ім'ям метода буде опис у квадратних дужках.</p> - -<pre class="brush: js">let sym1 = Symbol("foo"); -let sym2 = Symbol(); -let o = { - [sym1]: function(){}, - [sym2]: function(){} -}; - -o[sym1].name; // "[foo]" -o[sym2].name; // ""</pre> - -<h2 id="Компресори_та_мініфікатори_JavaScript">Компресори та мініфікатори JavaScript</h2> - -<div class="blockIndicator warning"> -<p><strong>Застереження:</strong> Будьте обережні, використовуючи <code>Function.name</code> та перетворення коду, які здійснюють компресори (мініфікатори) або обфускатори JavaScript. Ці інструменти часто використовуються як частина конвеєра збірки JavaScript, щоб зменшити розмір програми перед розгортанням у виробничому середовищі. Такі перетворення часто змінюють ім'я функції під час збірки.</p> -</div> - -<p>Подібний першокод:</p> - -<pre class="brush: js">function Foo() {}; -let foo = new Foo(); - -if (foo.constructor.name === 'Foo') { - console.log("'foo' є екземпляром 'Foo'"); -} else { - console.log('Ой-ой!'); -}</pre> - -<p>може бути стиснутий до:</p> - -<pre class="brush: js">function a() {}; -let b = new a(); -if (b.constructor.name === 'Foo') { - console.log("'foo' є екземпляром 'Foo'"); -} else { - console.log('Ой-ой!'); -}</pre> - -<p>У нестиснутій версії, програма виконує правдиву гілку і виводить <code>"'foo' є екземпляром 'Foo'"</code>. В той час, як у стиснутій версії вона поводиться по-іншому і виконує гілку else. Якщо ви покладаєтесь на <code>Function.name</code>, як у наведеному вище прикладі, переконайтесь, що ваш конвеєр збірки не змінює імена функцій, або не припускайте, що функція матиме певне ім'я.</p> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікація</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-name', 'name')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Початкове визначення.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-name', 'name')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div class="hidden"> -<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> -</div> - -<p>{{Compat("javascript.builtins.Function.name")}}</p> - -<div id="compat-mobile"></div> diff --git a/files/uk/web/javascript/reference/global_objects/function/tosource/index.html b/files/uk/web/javascript/reference/global_objects/function/tosource/index.html deleted file mode 100644 index a4a3cb4d16..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/tosource/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Function.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Function/toSource -tags: - - Function - - JavaScript - - метод - - нестандартний -translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource ---- -<div>{{JSRef}} {{non-standard_header}}</div> - -<p>Метод <code><strong>toSource()</strong></code> повертає рядкове представлення першокоду об'єкта.</p> - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><var>function</var>.toSource(); -</pre> - -<h3 id="Значення_що_повертається">Значення, що повертається</h3> - -<p>Рядкове представлення першокоду об'єкта.</p> - -<h2 id="Опис">Опис</h2> - -<p>Метод <code>toSource</code> повертає наступні значення:</p> - -<ul> - <li>Для вбудованого об'єкта {{jsxref("Function")}} <code>toSource()</code> повертає наступний рядок, який вказує, що першокод недоступний: - - <pre class="brush: js">function Function() { - [native code] -} -</pre> - </li> - <li>Для користувацьких функцій <code>toSource()</code> повертає першокод JavaScript, який визначає об'єкт, у вигляді рядка. - <pre class="brush: js">// Для прикладу: -function hello() { - console.log("Всім привіт!"); -} - -hello.toSource(); -</pre> - - <pre class="brush: js">// Результат: -"function hello() { - console.log(\"Всім привіт!\"); -}"</pre> - </li> -</ul> - -<p>Цей метод зазвичай викликається внутрішньо у JavaScript, а не явно у коді. Ви можете викликати <code>toSource()</code> під час налагодження для дослідження вмісту об'єкта.</p> - -<h2 id="Специфікації">Специфікації</h2> - -<p>Не є частиною жодного стандарту. Реалізований у JavaScript 1.3.</p> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Function.toSource")}}</p> -</div> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Object.prototype.toSource()")}}</li> -</ul> diff --git a/files/uk/web/javascript/reference/global_objects/function/tostring/index.html b/files/uk/web/javascript/reference/global_objects/function/tostring/index.html deleted file mode 100644 index 5c4b58e347..0000000000 --- a/files/uk/web/javascript/reference/global_objects/function/tostring/index.html +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: Function.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Function/toString -tags: - - Function - - JavaScript - - Prototype - - метод -translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString ---- -<div>{{JSRef}}</div> - -<p>Метод <code><strong>toString()</strong></code> повертає рядкове представлення першокоду функції.</p> - -<div>{{EmbedInteractiveExample("pages/js/function-tostring.html")}}</div> - - - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox"><code><var>function</var>.toString()</code></pre> - -<h3 id="Значення_що_повертається">Значення, що повертається</h3> - -<p>Рядкове представлення першокоду функції.</p> - -<h2 id="Опис">Опис</h2> - -<p>Об'єкт {{jsxref("Function")}} заміщує метод {{jsxref("Object.prototype.toString", "toString")}}, успадкований від {{jsxref("Object")}}; він не успадковує {{jsxref("Object.prototype.toString")}}. Для визначених користувачем об'єктів {{jsxref("Function")}} метод <code>toString</code> повертає рядок, який містить текстовий сегмент першокоду, що використовувався для визначення функції.</p> - -<p>JavaScript викликає метод <code>toString</code> автоматично, коли {{jsxref("Function")}} потрібно відобразити у вигляді текстового значення, наприклад, при поєднанні функції з рядком.</p> - -<p>Метод <code>toString()</code> викине виняток типу {{jsxref("TypeError")}} ("Function.prototype.toString called on incompatible object"), якщо його значення <code>this</code> не є об'єктом <code>Function</code>.</p> - -<pre class="brush: js example-bad">Function.prototype.toString.call('foo'); // TypeError -</pre> - -<p>Якщо метод <code>toString()</code> викликається на вбудованих функціональних об'єктах або функціях, створених <code>Function.prototype.bind</code>, <code>toString()</code> повертає <em>рядок нативної функції</em>, який виглядає так:</p> - -<pre class="brush: js">"function () {\n [native code]\n}" -</pre> - -<p>Якщо метод <code>toString()</code> викликається на функції, створеної конструктором <code>Function</code>, <code>toString()</code> повертає першокод синтезованої декларації функції, названої "anonymous", з наданими параметрами та тілом функції.</p> - -<h2 id="Приклади">Приклади</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Функція</th> - <th scope="col">Результат Function.prototype.toString</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <pre> -function f(){}</pre> - </td> - <td> - <pre> -"function f(){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -class A { a(){} }</pre> - </td> - <td> - <pre> -"class A { a(){} }"</pre> - </td> - </tr> - <tr> - <td> - <pre> -function* g(){}</pre> - </td> - <td> - <pre> -"function* g(){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -a => a</pre> - </td> - <td> - <pre> -"a => a"</pre> - </td> - </tr> - <tr> - <td> - <pre> -({ a(){} }.a)</pre> - </td> - <td> - <pre> -"a(){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -({ *a(){} }.a)</pre> - </td> - <td> - <pre> -"*a(){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -({ [0](){} }[0])</pre> - </td> - <td> - <pre> -"[0](){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -Object.getOwnPropertyDescriptor({ - get a(){} -}, "a").get</pre> - </td> - <td> - <pre> -"get a(){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -Object.getOwnPropertyDescriptor({ - set a(x){} -}, "a").set</pre> - </td> - <td> - <pre> -"set a(x){}"</pre> - </td> - </tr> - <tr> - <td> - <pre> -Function.prototype.toString</pre> - </td> - <td> - <pre> -"function toString() { [native code] }"</pre> - </td> - </tr> - <tr> - <td> - <pre> -(function f(){}.bind(0))</pre> - </td> - <td> - <pre> -"function () { [native code] }"</pre> - </td> - </tr> - <tr> - <td> - <pre> -Function("a", "b")</pre> - </td> - <td> - <pre> -"function anonymous(a\n) {\nb\n}"</pre> - </td> - </tr> - </tbody> -</table> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Специфікації</th> - <th scope="col">Статус</th> - <th scope="col">Коментар</th> - </tr> - <tr> - <td>{{SpecName('ES1')}}</td> - <td>{{Spec2('ES1')}}</td> - <td>Початкове визначення. Реалізовано у JavaScript 1.1.</td> - </tr> - <tr> - <td>{{SpecName('ES6', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}</td> - <td>{{Spec2('ES6')}}</td> - <td>Додані ще специфічні вимоги до рядкового представлення.</td> - </tr> - <tr> - <td><a href="https://tc39.github.io/Function-prototype-toString-revision/#sec-introduction"><code>Function.prototype.toString</code> revisions proposal</a></td> - <td>Чернетка</td> - <td>Стандартизує рядок нативної функції, закінчення рядків.</td> - </tr> - <tr> - <td>{{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}</td> - <td>{{Spec2('ESDraft')}}</td> - <td></td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - -<div> - - -<p>{{Compat("javascript.builtins.Function.toString")}}</p> -</div> - -<h2 id="Примітки_щодо_Firefox">Примітки щодо Firefox</h2> - -<ul> - <li>Починаючи з Firefox 17, метод <code>Function.prototype.toString()</code> був реалізований зберіганням першокоду функції. Декомпілятор був прибраний, щоб параметр <code>indentation</code> більше не був потрібний. Більше інформації дивіться на сторінці {{bug("761723")}}.</li> - <li>Починаюи з Firefox 38 і до 63, метод <code>Function.prototype.toString()</code> викидав об'єкти {{jsxref("Proxy")}} ({{bug(1100936)}} та {{bug(1440468)}}).</li> -</ul> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Object.prototype.toString()")}}</li> -</ul> |