我可以将JavaScript函数存储在数组中吗?

时间:2010-08-28 21:07:19

标签: javascript arrays function

如何在具有命名属性的数组中存储函数,因此我可以调用

FunctionArray["DoThis"]

甚至

FunctionArray[integer]

注意:我不想使用eval

8 个答案:

答案 0 :(得分:32)

要记住的重要一点是函数是JavaScript中的第一类对象。因此,您可以将它们作为参数传递,将它们用作对象值等等。数组中的值只是其中的一个例子。

请注意,我们不会将函数存储在数组中,尽管我们可以这样做并使用数字索引访问它们。我们将它们存储在一个常规对象中,该对象由我们想要访问该函数的名称键入。

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

打电话给

functions.blah();

functions["blah"]();

答案 1 :(得分:13)

你想要一个对象文字,而不是一个数组。

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

对象

x['dothis']()

您也可以动态调用

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

静态/硬编码调用:

x.dothis()

如果你确实想要一个数组:

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

答案 2 :(得分:3)

你实际上可以这样做,只需在数组之外声明它,就像这样......

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 :(得分:2)

您可以通过它的名称(x [“A”])访问对象的属性,如果要分配索引(0 =“A”),则必须执行此操作here is a example。 (我不确定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

答案 4 :(得分:2)

您甚至可以使用函数作为属性的名称:

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

答案 5 :(得分:1)

您可以将内容直接存储在数组中,但可以作为对象存储,例如:

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

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

You can give it a try here

答案 6 :(得分:1)

这是一个包含各种数据类型(包括函数)的数组。

虽然此示例中有一个对象,但该函数不在对象内。

如果用字符串替换此对象,该功能仍将按计划运行。

我可以从内部或不使用数组调用该函数。

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!

答案 7 :(得分:1)

基本上,函数是javascript中特殊类型的Object。在javascript中,在数组中你可以存储任何东西(不一定是同一类型)。所以顺便说一下,是的!你可以在javascript中将函数,对象,原始值存储在数组中。

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

你可以混合使用对象和函数来命名函数,如:

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

您也可以将此对象存储在数组中

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

如果您想拨打电话,请拨打:

arr[0].callBythisname();