Function.name

Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

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

Property attributes of Function.name
Writable no
Enumerable no
Configurable yes
Зверність увагу, що в нестандартних, пре-ES6 реалізаціях атрибут configurable теж мав значення false.
 

Опис

Властивість name повертає ім'я функції, або (перед реалізацією ES6) порожній рядок для анонімних функцій:

function doSomething() {}

console.log(doSomething.name); // logs "doSomething"

Властивіть name повертає порожній рядок для функцій, які створюються за допомогою синтаксису new Function(...)або ж Function(...).

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

var f = function() {};
var object = {
  someMethod: function() {}
};

console.log(f.name == ''); // true
console.log(object.someMethod.name == ''); // also true

Браузери що підтримують функції ES6 можуть вивести ім'я анонімної функції з її синтаксичної позиції. Наприклад:

var f = function() {};
console.log(f.name); // "f"

Ви можете оголосити функцію з ім'ям в function expression:

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

try { object_someMethod } catch(e) { console.log(e); }
// ReferenceError: object_someMethod is not defined

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

var object = {
  // anonymous
  someMethod: function() {}
};

object.someMethod.name = 'someMethod';
console.log(object.someMethod.name); // empty string, someMethod is anonymous

Однак, щоб змінити її, Ви могли б використовувати Object.defineProperty().

Приклади

Ви можете використовувати obj.constructor.name для перевірки "класу" об'єкту:

function a() {}

var b = new a();

console.log(b.constructor.name); // logs "a"

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

Специфікація Статус Примітка
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'name' in that specification.
Standard Початкове визначення.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'name' in that specification.
Draft  

Браузерна сумісність

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 33.0 (Yes) No support (Yes) (Yes)
Configurable: true 43.0 38 (38) ? ? ?
Inferred names on anonymous functions 51.0 No support [1] ? ? ?
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support (Yes) (Yes) (Yes) No support (Yes) (Yes) (Yes)
Configurable: true ? ? 38.0 (38) ? ? ? ?
Inferred names on anonymous functions No support 51.0 No support [1] ? ? ? 51.0

[1] See bug 883377.

Мітки документа й учасники

 Востаннє оновлена: MyrosiaPabyrivska,