web-dev-qa-db-ja.com

JavaScript関数を配列に格納できますか?

名前付きプロパティを持つ配列に関数を保存するにはどうすればよいですか?

FunctionArray["DoThis"]

あるいは

FunctionArray[integer]

注:evalを使用したくありません。

28
Emre

覚えておくべき重要なことは、関数はJavaScriptのファーストクラスオブジェクトであることです。したがって、それらをパラメーターとして渡したり、オブジェクト値として使用したりできます。配列の値はその一例にすぎません。

関数を配列に格納しているわけではありませんが、それを実行して数値インデックスでアクセスすることができます。それらを、その関数にアクセスしたい名前でキー付けされた通常のオブジェクトに格納します。

var functions = {
    blah: function() { alert("blah"); },
    foo: function() { console.log("foo"); }
};

呼びます

functions.blah();

または

functions["blah"]();
32
Anurag

配列ではなくオブジェクトリテラルが必要です。

x = { 'dothis': function() { alert('hi'); } };

オブジェクト

x['dothis']()

動的に呼び出すこともできます

y = 'dothis';
x[y]()

静的/ハードコードされた呼び出し:

x.dothis()

ただし、配列が必要な場合:

x = [function(){alert('hi');}][0]()
13
meder omuraliev

実際にそれを行うことができます、それを配列の外で宣言するだけです...

const your_function = function(){ console.log( "I am your function" ) }

const group = [ 0, "lizard", false, your_function() ]

group[ 3 ]

必要に応じて、呼び出し先を変更することもできます...

const your_function = function(){ console.log( "I am your function" ) }

const group = [ 0, "lizard", false, your_function ]

group[ 3 ]()

編集:関数の名前が間違っていました:/ sry

3
Fillipe Ogg

プロパティの名前として関数を使用することもできます。

var func = function(a, b){alert(a+b)};
var obj = {};
obj[func] = 2;
2
Dmitry Masley

オブジェクトのプロパティには、名前(x ["A"])を使用してアクセスできます。インデックス(0 = "A")を割り当てる場合は、これを行う必要があります 例はこちら 。 (forループがどのブラウザでも機能するかどうかはわかりませんが、Firefoxでテストしましたが、アイデアを得ることができます)

var x = {};

x.A = function() { alert("func 1"); };
x.B = function() { alert("func 2"); };


var i = 0;
for (a in x)
{
    x[i] = x[a];
    ++i;
}


x[0](); // func 1
x[1](); // func 2
x["A"](); // func 1
x["B"](); // func 2
2
BrunoLM

配列に直接格納できますが、オブジェクトとして、たとえば:

var Functions = { DoThis: function() { alert("do this"); } };

Functions['DoThis'](); //alerts "do this"
Functions.DoThis()     //alerts "do this"

ここで試すことができます

1
Nick Craver

基本的に、関数はJavaScriptの特別なタイプのオブジェクトです。また、JavaScriptでは、配列に何でも格納できます(同じタイプである必要はありません)。だから、これで行く、はい!関数、オブジェクト、プリミティブ値をJavaScriptの配列に格納できます。

var arr = ["hello",true,false, 1, {name: "arshad"}, function(){}]

また、オブジェクトと関数を混合して、名前付き関数を次のようにすることもできます。

{ callBythisname: function(){ .... }}

このオブジェクトを配列に格納することもできます

var arr = [{ callBythisname: function(){ .... }}];

呼び出す場合は、次のように呼び出します。

arr[0].callBythisname();
1
Arshad

これは、関数を含むさまざまなデータ型を含む配列です。

この例にはオブジェクトがありますが、関数はオブジェクト内にありません。

このオブジェクトを文字列に置き換えても、関数は計画どおりに機能します。

配列内または配列なしで関数を呼び出すことができます。

myArray = [
        1,
        true,
        "String",
        {
            name: "trey",
            age: 43,
        },
        [1,2,3,4],
        myFunction = function(){
            console.log("whats up!");
        },
        myArray[5](),
    ];
    console.log(myArray);
    myArray[5]();

出力は次のとおりです。

whats up!
[ 1, true, 'String', { name: 'trey', age: 43 }, [ 1, 2, 3, 4 ], [Function], undefined ]
whats up!
1
Trey Brister