From 95aca4b4d8fa62815d4bd412fff1a364f842814a Mon Sep 17 00:00:00 2001 From: Ryan Johnson Date: Thu, 29 Apr 2021 16:16:42 -0700 Subject: remove retired locales (#699) --- .../global_objects/function/name/index.html | 223 --------------------- 1 file changed, 223 deletions(-) delete mode 100644 files/uk/web/javascript/reference/global_objects/function/name/index.html (limited to 'files/uk/web/javascript/reference/global_objects/function/name') 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 ---- -
{{JSRef}}
- -

Властивість тільки для читання об'єкта {{jsxref("Function")}} name відображає ім'я функції, яке було вказане при створенні, або "anonymous" для анонімних функцій.

- -

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

- - - -

{{js_property_attributes(0,0,1)}}

- -
-

Зауважте, що у нестандартних реалізаціях до ES2015 атрибут configurable (доступний для налаштування) також мав значення false.

-
- -

Приклади

- -

Ім'я функції

- -

Властивість name повертає ім'я функції.

- -
function doSomething() {}
-console.log(doSomething.name); // "doSomething"
-
- -

Ім'я конструктора функції

- -

Функції, створені за допомогою new Function(...) або просто Function(...) створюють об'єкти {{jsxref("Function")}}, а їхнє ім'я "anonymous".

- -
(new Function).name; // "anonymous"
- -

Виведені імена функцій

- -

Змінні та методи можуть вивести ім'я анонімної функції з її синтаксичної позиції (нове у ECMAScript 2015).

- -
var f = function() {};
-var object = {
-  someMethod: function() {}
-};
-
-console.log(f.name); // "f"
-console.log(object.someMethod.name); // "someMethod"
-
- -

Ви можете оголосити функцію з ім'ям у {{jsxref("Operators/Function", "функціональному виразі", "", 1)}}:

- -
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
-
- -

Ви не можете змінювати ім'я функції, ця властивість доступна лише для читання:

- - - -
var object = {
-  // anonymous
-  someMethod: function() {}
-};
-
-object.someMethod.name = 'otherMethod';
-console.log(object.someMethod.name); // someMethod
-
- -

Однак, щоб змінити її, ви можете скористатись {{jsxref("Object.defineProperty()")}}.

- -

Імена лаконічних методів

- -
var o = {
-  foo(){}
-};
-o.foo.name; // "foo";
- -

Імена зв'язаних функцій

- -

Метод {{jsxref("Function.bind()")}} створює функцію, чиїм ім'ям буде "bound" плюс ім'я функції.

- -
function foo() {};
-foo.bind({}).name; // "bound foo"
- -

Імена функцій для гетерів та сетерів

- -

При використанні властивостей-аксесорів get та set у імені функції з'являється "get" або "set".

- -
let o = {
-  get foo(){},
-  set foo(x){}
-};
-
-var descriptor = Object.getOwnPropertyDescriptor(o, "foo");
-descriptor.get.name; // "get foo"
-descriptor.set.name; // "set foo";
- -

Імена функцій у класах

- -

Ви можете скористатись obj.constructor.name, щоб перевірити "клас" об'єкта (але обов'язково прочитайте застереження нижче):

- -
function Foo() {}  // Синтаксис ES2015: class Foo {}
-
-var fooInstance = new Foo();
-console.log(fooInstance.constructor.name); // виводить "Foo"
- -
-

Застереження: Інтерпретатор коду встановить значення вбудованої властивості Function.name тільки якщо функція не має своєї властивості з назвою name (дивіться розділ 9.2.11 ECMAScript2015 Language Specification). Однак, ES2015 визначає ключове слово static таким чином, що статичні методі встановлюються як OwnProperty функції-конструктора класу (ECMAScript2015, 14.5.14.21.b12.2.6.9).

-
- -

І тому ми не можемо отримати ім'я класу фактично для жодного класу, що має статичний метод name():

- -
class Foo {
-  constructor() {}
-  static name() {}
-}
- -

З методом static name()Foo.name тепер містить не ім'я класу, а посилання на функцію name(). Наведене вище оголошення класу у синтаксисі ES2015 буде поводитись у Chrome чи Firefox схоже на наступний фрагмент коду у синтаксисі ES5:

- -
function Foo() {}
-Object.defineProperty(Foo, 'name', { writable: true });
-Foo.name = function() {};
- -

Спроба отримати клас fooInstance через fooInstance.constructor.name поверне нам зовсім не ім'я класу, а посилання на статичний метод класу. Приклад:

- -
let fooInstance = new Foo();
-console.log(fooInstance.constructor.name); // виводить function name()
- -

Ви могли також побачити у прикладі з синтаксисом ES5, що у Chrome чи Firefox наше статичне оголошення Foo.name стає доступним для запису. Вбудоване оголошення за відсутності користувацького статичного методу є доступним лише для читання:

- -
Foo.name = 'Привіт';
-console.log(Foo.name);
-// виведе "Привіт", якщо клас має статичну властивість name(), інакше виведе "Foo".
- -

Таким чином, не можна розраховувати, що вбудована властивість Function.name завжди міститиме ім'я класу.

- -

Символи в якості імен функцій

- -

Якщо {{jsxref("Symbol")}} використовується в якості імені функції і має опис, ім'ям метода буде опис у квадратних дужках.

- -
let sym1 = Symbol("foo");
-let sym2 = Symbol();
-let o = {
-  [sym1]: function(){},
-  [sym2]: function(){}
-};
-
-o[sym1].name; // "[foo]"
-o[sym2].name; // ""
- -

Компресори та мініфікатори JavaScript

- -
-

Застереження: Будьте обережні, використовуючи Function.name та перетворення коду, які здійснюють компресори (мініфікатори) або обфускатори JavaScript. Ці інструменти часто використовуються як частина конвеєра збірки JavaScript, щоб зменшити розмір програми перед розгортанням  у виробничому середовищі. Такі перетворення часто змінюють ім'я функції під час збірки.

-
- -

Подібний першокод:

- -
function Foo() {};
-let foo = new Foo();
-
-if (foo.constructor.name === 'Foo') {
-  console.log("'foo' є екземпляром 'Foo'");
-} else {
-  console.log('Ой-ой!');
-}
- -

може бути стиснутий до:

- -
function a() {};
-let b = new a();
-if (b.constructor.name === 'Foo') {
-  console.log("'foo' є екземпляром 'Foo'");
-} else {
-  console.log('Ой-ой!');
-}
- -

У нестиснутій версії, програма виконує правдиву гілку і виводить "'foo' є екземпляром 'Foo'". В той час, як у стиснутій версії вона поводиться по-іншому і виконує гілку else. Якщо ви покладаєтесь на Function.name, як у наведеному вище прикладі, переконайтесь, що ваш конвеєр збірки не змінює імена функцій, або не припускайте, що функція матиме певне ім'я.

- -

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

- - - - - - - - - - - - - - - - - - - -
СпецифікаціяСтатусКоментар
{{SpecName('ES6', '#sec-name', 'name')}}{{Spec2('ES6')}}Початкове визначення.
{{SpecName('ESDraft', '#sec-name', 'name')}}{{Spec2('ESDraft')}}
- -

Сумісність з веб-переглядачами

- - - -

{{Compat("javascript.builtins.Function.name")}}

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