Как я могу хранить функции в массиве с именованными свойствами, поэтому я могу позвонить как
FunctionArray["DoThis"]
или даже
FunctionArray[integer]
Примечание: Я не хочу использовать eval
.
Как я могу хранить функции в массиве с именованными свойствами, поэтому я могу позвонить как
FunctionArray["DoThis"]
или даже
FunctionArray[integer]
Примечание: Я не хочу использовать eval
.
Важно помнить, что функции являются объектами первого класса в JavaScript. Поэтому вы можете передавать их как параметры, использовать их как значения объектов и так далее. Значение (значения) в массиве - всего лишь один пример этого.
Обратите внимание, что мы не сохраняем функции в массиве, хотя мы можем сделать это и получить к ним доступ с числовым индексом. Мы храним их в обычном объекте с ключом по имени, к которому мы хотим получить доступ к этой функции.
var functions = {
blah: function() { alert("blah"); },
foo: function() { console.log("foo"); }
};
вызов
functions.blah();
или
functions["blah"]();
Вам нужен литерал объекта, а не массив.
x = { 'dothis': function() { alert('hi'); } };
Объект
x['dothis']()
Вы также можете динамически вызывать
y = 'dothis';
x[y]()
Статический/жестко закодированный вызов:
x.dothis()
Если вам нужен массив:
x = [function(){alert('hi');}][0]()
вы можете это сделать, просто объявите его вне массива, например...
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 ]()
EDIT: функции были названы неверными:/sry
Вы можете получить доступ к свойствам объекта через это имя (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
Вы даже можете использовать функцию как имя свойства:
var func = function(a, b){alert(a+b)};
var obj = {};
obj[func] = 2;
Вы можете хранить вещи непосредственно в массиве, но как объект, например:
var Functions = { DoThis: function() { alert("do this"); } };
Functions['DoThis'](); //alerts "do this"
Functions.DoThis() //alerts "do this"
Вот массив, который содержит различные типы данных, включая функцию.
Хотя в этом примере есть объект, функция не находится внутри объекта.
Если вы замените этот объект на строку, функция будет работать, как и планировалось.
Я могу вызвать функцию изнутри или без массива.
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!
В основном функция - это особый тип объекта в javascript. А в javascript в массиве вы можете хранить что угодно (не обязательно одного и того же типа). Так что, пройдя это, да! вы можете сохранить функцию, объект, примитивные значения в массиве в javascript.
var arr = ["hello",true,false, 1, {name: "arshad"}, function(){}]
И вы можете смешать объект и функцию, чтобы вызвать именованную функцию:
{ callBythisname: function(){ .... }}
Вы также можете сохранить этот объект в массиве
var arr = [{ callBythisname: function(){ .... }}];
Если вы хотите вызвать его, назовите:
arr[0].callBythisname();