Functionコンストラクタを使って関数を定義する

JavaScript での関数は、組み込みオブジェクトのひとつである Function オブジェクトのことです。ここまでは function キーワードを使った関数の定義や、関数リテラルを使った関数の定義の方法をご紹介してきましたが、 Function オブジェクトのコンストラクタを使って関数を定義することもできます。ここでは Function コンストラクタを使って関数を定義する方法について解説します。

(Last modified: )

Functionコンストラクタを使った関数の定義

Function コンストラクタを使って関数を定義する方法は次のような書式を使用します。

let 変数名 = new Function('引数1', '引数2', ..., '実行する処理');

Function コンストラクタを使用する場合は関数名は使用しません。 new Funciton のあとの ( から ) の間に引数を指定します。引数は文字列で指定する点に注意してください。そして最後に関数が呼ばれたと記事実行する処理を同じように文字列として指定します。

Funciton コンストラクタを使って作成した関数オブジェクトは、変数に代入して使用します。

new は省略可能なので次のように記述することもできます。

Function('引数1', '引数2', ..., '実行する処理');

引数の部分は一つ一つ記述する代わりに複数の引数をカンマ(,)で区切って一つの文字列の中で記述することもできます。

Function('引数1,引数2,引数3', '実行する処理');

関数で引数を受け取らない場合は引数の部分は省略可能です。ただ関数が呼ばれた時に実行する処理は必ず記述してください。

new Function('実行する処理');

関数が呼ばれた時に複数の処理を実行する必要がある場合は、セミコロン(;)で区切って一つの文字列の中で記述してください。

new Function('引数', ..., '実行する処理1;実行する処理2;実行する処理3');

Functionコンストラクタを使って定義した関数を呼び出す

Function コンストラクタを使って定義した関数を呼び出すには次のように記述します。

let 変数名 = new Function('引数', ..., '実行する処理');

変数名(引数, ...);

関数を呼び出すには関数を代入した変数名を記述したあとで ( と ) の間に関数に渡す引数を記述します。複数の引数がある場合にはカンマ(,)で区切って記述して下さい。引数が無い場合には何も記述しなくてもいいのですがその場合でも ( と ) は記述する必要があります。

それでは実際の使い方を見ていきます。次のサンプルを見てください。

let dispTotal = new Function('x', 'y', 'let sum = x + y;return sum');

let result = dispTotal(3, 4);
console.log(result);
>> 7

今回のサンプルでは関数は 2 つの引数を受け取り、 2 つの引数を加算した結果を関数の呼び出し元に返しています。関数を呼び出す側は 2 つの値を指定して関数を呼び出し、その結果を受け取ります。

細かい点では違いがありますが Function コンストラクタで関数を作成する場合と他の方法で作成する場合で大きな違いはありません。あまりこの方法は使われていないと思いますので、あえてこの方法を使わずに function キーワードを使った関数の宣言を行う方法や関数リテラルを使って関数を定義する方法を利用するのがいいのではないかと思います。

-- --

JavaScript で Function コンストラクタを使って関数を定義する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。