Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在数组中存储JavaScript函数吗?_Javascript_Arrays_Function - Fatal编程技术网

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

我可以在数组中存储JavaScript函数吗?,javascript,arrays,function,Javascript,Arrays,Function,如何将函数存储在具有命名属性的数组中,以便调用 FunctionArray["DoThis"] 甚至 FunctionArray[integer] ? 注意:我不希望使用eval您想要的是对象文字,而不是数组 x = { 'dothis': function() { alert('hi'); } }; 反对 x['dothis']() 您还可以动态调用 y = 'dothis'; x[y]() 静态/硬编码调用: x.dothis() 但是,如果确实需要阵列,请

如何将函数存储在具有命名属性的数组中,以便调用

FunctionArray["DoThis"]
甚至

FunctionArray[integer]
?



注意:我不希望使用
eval

您想要的是对象文字,而不是数组

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

x['dothis']()
您还可以动态调用

y = 'dothis';
x[y]()
静态/硬编码调用:

x.dothis()
但是,如果确实需要阵列,请执行以下操作:

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

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

请注意,我们没有将函数存储在数组中,尽管我们可以这样做并使用数字索引访问它们。我们将它们存储在一个常规对象中,该对象由我们希望访问该函数的名称进行键控

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

functions.blah();


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

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

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

.

您可以通过对象的名称(x[“A”])访问对象的属性。如果要分配索引(0=“A”),必须这样做,并且。(我不确定
for
循环是否能在任何浏览器上运行;我已经在Firefox上进行了测试,但你可以理解。)


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

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

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

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

如果用字符串替换此对象,该函数仍将按计划工作

我可以从数组内部或外部调用函数

myArray = [
        1,
        true,
        "String",
        {
            name: "trey",
            age: 43,
        },
        [1,2,3,4],
        myFunction = function(){
            console.log("What\'s up!");
        },
        myArray[5](),
    ];
    console.log(myArray);
    myArray[5]();
以下是输出:

怎么了!
[1,true,'String',{name:'trey',age:43},[1,2,3,4],[Function],未定义]
怎么了!

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

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

基本上,函数是JavaScript中一种特殊类型的对象。在JavaScript中,在数组中可以存储任何内容(不一定是同一类型)。这么说来,是的!,可以在JavaScript中的数组中存储函数、对象和基元值:

var arr = ["Hello", true, false, 1, {name: "Arshad"}, function(){}]
您可以混合对象和函数,使命名函数如下所示:

{ callBythisname: function(){ .... }}
也可以将此对象存储在数组中:

var arr = [{ callBythisname: function(){ .... }}];
如果你想打电话给它,可以这样打:

arr[0].callBythisname();
答案是有一个简单的答案,但它不需要被这个线程中的答案简化。简单的答案是可以将函数放入数组中。事实上,您可以声明变量并在函数中引用它们

示例:

设a=1;
设b=2;
设arr=[
A.
B
函数(){
返回a+b;
},
];
console.log(arr[2]());//返回3

控制台日志(arr类型);//返回对象
hmm。。谢谢为什么这行不通?var FunctionArray=[];FunctionArray[“m+”]=function(){…}嗯,当我说FunctionArray[“whatever”]()时它起作用了;谢谢again@Emre-这是一个数组,要使其工作,只需使用
var FunctionArray={}创建一个对象
作为第一行:)@Emre–您可以在数组中使用命名引用存储函数,因为数组只是一个(特殊类型的)对象。第一条评论中的示例的问题是,
+
在许多JavaScript实现中都不是一个好例子。不要期望
x[0]
在循环之后成为
x.a
x[1]
成为
x.B
for…in
在中迭代对象的属性。但是你可以做一些像
x[0]=x.A;x[0]()。你能复制它吗?我猜这个顺序不是真的任意的,它取决于你定义的顺序。至少我不能重现这种情况。这种顺序不是“任意”的,因为浏览器的实现往往按照定义的顺序进行。但这是浏览器的个人实现决定。根据规范,对象文字没有严格的顺序。因此,尽管代码可能会在没有任何负面工件的情况下按照定义的顺序执行,但您不必依赖它,因为浏览器可能会更改它们的实现,或者,新浏览器可能会进入不以这种方式实现的场景。我如何在阵列中的另一个函数中调用该阵列中的函数的可能重复
var arr = [{ callBythisname: function(){ .... }}];
arr[0].callBythisname();