情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

ECMAScript 6の新機能(23)関数名

ECMAScript 6でFunction.nameが追加されました。

これは関数名を格納しています。

C:\work\node>node
> function f1 () {}
undefined
> f1.name
'f1'

名前付きの関数が変数に格納されても、その名前が変わることはありません。

> var f2 = function f () {}
undefined
> f2.name
'f'

無名関数の場合には空の文字列となります。

> var f3 = function () {}
undefined
> f3.name
''
> var f4 = () => {}
undefined
> f4.name
''

クラスの場合も同様です。

> class Foon {}
[Function: Foon]
> Foon.name
'Foon'
> var Barn = class Bar {}
undefined
> Barn.name
'Bar'
> var Baz = class {}
undefined
> Baz.name
''

オブジェクトのプロパティが関数である場合には下のようになります。

> function func () {}
undefined
> const obj = {
... m1 () {},
... m2: function () {},
... func
... }
undefined
> func.name
'func'
> obj.m1.name
'm1'
> obj.m2.name
''
> obj.func.name
'func'
> class C {
... m1 () {}
... static m2 () {}
... }
[Function: C]
> C.m2.name
'm2'
> var c = new C()
undefined
> c.m1.name
'm1'
> C.prototype.m1.name
'm1'

オブジェクトのプロパティのキーがシンボルである場合には下のようになります。

> var k1 = Symbol('foo')
undefined
> var k2 = Symbol('bar')
undefined
> var k3 = Symbol()
undefined
> var obj2 = {
... [k1] () {},
... [k2]: function () {},
... [k3] () {}
... }
undefined
> obj2[k1].name
''
> obj2[k2].name
''
> obj2[k3].name
''

Functionクラスをインスタンス化した場合にはanonymousとなります。

> var f5 = new Function()
undefined
> f5.name
'anonymous'

Function.bind関数を使用した場合には元の関数名の先頭にboundを付加したものとなります。

> var bound = f5.bind(undefined)
undefined
> bound.name
'bound anonymous'
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-ecmascript 2015, ecmascript 6, Javascript