Baseline Widely available
Read-only ÑвойÑÑво name
глобалÑного обÑекÑа Function
и его ÑкземплÑÑов ÑодеÑÐ¶Ð¸Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ ÑÑнкÑии Ñозданное во вÑÐµÐ¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑии или пÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ ÑÑÑлки на ÑÑнкÑÐ¸Ñ Ð¿ÐµÑеменной, ÑвойÑÑвÑ, аÑгÑменÑÑ Ð¸ Ñ. п. ÐÐ»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½ÑÑ
ÑÑнкÑий ÑÑо ÑвойÑÑво Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение "anonymous"
или пÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ ""
.
const func1 = function () {};
const object = {
func2: function () {},
};
console.log(func1.name);
// Expected output: "func1"
console.log(object.func2.name);
// Expected output: "func2"
ÐнаÑение
СÑÑока.
ÐапиÑÑваемое Ð½ÐµÑ ÐеÑеÑиÑлÑемое Ð½ÐµÑ ÐаÑÑÑаиваемое даÐÑимеÑание: ÐамеÑÑÑе, ÑÑо в неÑÑандаÑÑном, pre-ES2015 Ñелизе configurable
ÑвойÑÑво бÑло false
СвойÑÑво name
возвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑÑнкÑии, либо пÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½ÑÑ
ÑÑнкÑий:
function doSomething() {}
alert(doSomething.name); // вÑÐ²ÐµÐ´ÐµÑ "doSomething"
ÐÐ¼Ñ ÑÑнкÑии-конÑÑÑÑкÑоÑа
ФÑнкÑии, ÑозданнÑе ÑинÑакÑиÑом new Function(...)
или пÑоÑÑо Function(...)
ÑоздаÑÑ Function
и имеÑÑ name "anonymous":
new Function().name; // "anonymous"
ÐÑедполагаемÑе имена ÑÑнкÑий
ÐеÑеменнÑе и меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑедположиÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ анонимной ÑÑнкÑии из ÐµÑ ÑинÑакÑиÑеÑкой позиÑии (new in ECMAScript 2015).
var f = function () {};
var object = {
someMethod: function () {},
};
console.log(f.name); // "f"
console.log(object.someMethod.name); // "someMethod"
ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ в function expression:
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 = {
// Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ ÑÑнкÑиÑ
someMethod: function () {},
};
object.someMethod.name = "otherMethod";
alert(object.someMethod.name); //someMethod
ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ name можно иÑполÑзоваÑÑ Object.defineProperty()
.
var o = {
foo() {},
};
o.foo.name; // "foo";
Ðмена ÑÑнкÑий поÑле пÑивÑзки
Function.bind()
пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑÑнкÑиÑ, полÑÑаÑÑÑÑ Ð¸Ð¼Ñ "bound и название Ñамой ÑÑнкÑии.
function foo() {}
foo.bind({}).name; // "bound foo"
Ðмена ÑÑнкÑий Ð´Ð»Ñ getters и setters
Ðогда иÑполÑзÑÑÑÑÑ 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
ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ "class" обÑекÑа (ÑиÑайÑе пÑедÑпÑеждение ниже):
function Foo() {} // ES2015 Syntax: class Foo {} var fooInstance = new Foo(); console.log(fooInstance.constructor.name); // logs "Foo"
ÐÑедÑпÑеждение: ÐнÑеÑпÑеÑаÑÐ¾Ñ Ð¾Ð±ÑÑÐ²Ð¸Ñ Ð²ÑÑÑоенное Function.name
ÑвойÑÑво ÑолÑко еÑли ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ñвоего ÑобÑÑвенного ÑвойÑÑва name (Ñм. 9.2.11 of the ECMAScript2015 Language Specification). Ðднако, в ES2015 ÑÑаÑиÑнÑе меÑÐ¾Ð´Ñ Ð¿ÐµÑезапиÑÑваÑÑ OwnProperty конÑÑÑÑкÑоÑов клаÑÑа-ÑÑнкÑии (ECMAScript2015, 14.5.14.21.b + 12.2.6.9).
Таким обÑазом, нелÑÐ·Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к name
лÑбого клаÑÑа Ñо ÑÑаÑиÑнÑм ÑвойÑÑвом 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
не даÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ клаÑÑа, но вÑÐ²ÐµÐ´ÐµÑ Ð¼ÐµÑод name()
. ÐÑимеÑ:
let fooInstance = new Foo(); console.log(fooInstance.constructor.name); // logs function name()
Ðз ES5 syntax пÑимеÑа Ñакже видно, ÑÑо в Chrome или Firefox ÑÑаÑиÑное опÑеделение Foo.name
ÑÑановиÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑваемÑм (writable). ÐÑÑÑоенное опÑеделение в оÑÑÑÑÑÑвии каÑÑомного ÑÑаÑиÑного меÑодадоÑÑÑпно ÑолÑко Ð´Ð»Ñ ÑÑениÑ:
Foo.name = 'Hello'; console.log(Foo.name); // logs "Hello" if class Foo has a static name() property but "Foo" if not.
СледоваÑелÑно не ожидайÑе, ÑÑо Function.name
ÑвойÑÑво бÑÐ´ÐµÑ Ð²Ñегда ÑодеÑжаÑÑ Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа.
ÐÑли Ñ Symbol
обÑÑвлÑеÑÑÑ Ð¸Ð¼Ñ, Ñо название меÑода - ÑÑо Ð¸Ð¼Ñ ÐºÐ²Ð°Ð´ÑаÑнÑÑ
ÑкобкаÑ
.
let sym1 = Symbol("foo");
let sym2 = Symbol();
let o = {
[sym1]: function () {},
[sym2]: function () {},
};
o[sym1].name; // "[foo]"
o[sym2].name; // ""
JavaScript миниÑиÑиÑованнÑй
ÐÑедÑпÑеждение: ÐÑдÑÑе оÑÑоÑожнÑ, иÑполÑзÑÑ Function.name
и Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ source кода Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ JavaScript compressors (minifiers) или обÑÑÑкаÑоÑов. ÐÑи инÑÑÑÑменÑÑ ÑаÑÑо иÑполÑзÑÑÑÑÑ, как вÑÑÑоеннÑе в JavaScript build pipeline, ÑÑÐ¾Ð±Ñ ÑокÑаÑиÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð±Ð¸Ð»Ð´Ð° пеÑед деплоем в production. Такие ÑÑанÑÑоÑмаÑии ÑаÑÑо изменÑÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑнкÑий.
Такой source code:
function Foo() {}; let foo = new Foo(); if (foo.constructor.name === 'Foo') { console.log("'foo' is an instance of 'Foo'"); } else { console.log('Oops!'); }
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¶Ð°Ñ Ð²:
function a() {}; let b = new a(); if (b.constructor.name === 'Foo') { console.log("'foo' is an instance of 'Foo'"); } else { console.log('Oops!'); }
РнеÑжаÑой веÑÑии код вÑполнÑеÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾ "'foo' is an instance of 'Foo'"
. Ð Ñо вÑемÑ, как в ÑжаÑой веÑÑии он ведÑÑ ÑÐµÐ±Ñ Ð¸Ð½Ð°Ñе. ÐÑли Ð²Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑеÑÑ Ð½Ð° Function.name
, как в пÑимеÑе, Ñо ÑбедиÑеÑÑ, ÑÑо pipeline не менÑÐµÑ ÐºÐ¾Ð´ или не ожидайÑе Ð¾Ñ ÑÑнкÑии опÑеделÑнного имени.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4