Comment puis-je stocker des fonctions dans un tableau avec des propriétés nommées, afin que je puisse appeler comme
FunctionArray["DoThis"]
ou même
FunctionArray[integer]
Remarque: je ne souhaite pas utiliser eval
.
La chose importante à retenir est que les fonctions sont des objets de première classe en JavaScript. Vous pouvez donc les transmettre en tant que paramètres, les utiliser en tant que valeurs d'objet, etc. Les valeurs dans un tableau ne sont qu'un exemple de cela.
Notez que nous ne stockons pas les fonctions dans un tableau, même si nous pouvons le faire et y accéder avec un index numérique. Nous les stockons dans un objet régulier portant le nom avec lequel nous souhaitons accéder à cette fonction.
var functions = {
blah: function() { alert("blah"); },
foo: function() { console.log("foo"); }
};
appeler comme
functions.blah();
ou
functions["blah"]();
Vous voulez un littéral d'objet, pas un tableau.
x = { 'dothis': function() { alert('hi'); } };
Objet
x['dothis']()
Vous pouvez aussi invoquer dynamiquement
y = 'dothis';
x[y]()
Invocation statique/codée en dur:
x.dothis()
Si vous voulez cependant un tableau:
x = [function(){alert('hi');}][0]()
vous pouvez réellement le faire, déclarez-le simplement en dehors du tableau, comme si ...
const your_function = function(){ console.log( "I am your function" ) }
const group = [ 0, "lizard", false, your_function() ]
group[ 3 ]
vous pouvez aussi changer où il s'appelle, si vous voulez ...
const your_function = function(){ console.log( "I am your function" ) }
const group = [ 0, "lizard", false, your_function ]
group[ 3 ]()
EDIT: les fonctions ont été mal nommées:/sry
Vous pouvez même utiliser function comme nom de la propriété:
var func = function(a, b){alert(a+b)};
var obj = {};
obj[func] = 2;
Vous pouvez accéder aux propriétés d'un objet par son nom (x ["A"]), si vous souhaitez affecter des index (0 = "A"), vous devez le faire, voici un exemple . (Je ne suis pas sûr que la boucle for
fonctionnera sur n'importe quel navigateur, j'ai déjà testé sur Firefox, mais vous pouvez en avoir l'idée.)
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
Vous pouvez stocker des éléments directement dans un tableau, mais sous forme d'objet, par exemple:
var Functions = { DoThis: function() { alert("do this"); } };
Functions['DoThis'](); //alerts "do this"
Functions.DoThis() //alerts "do this"
Voici un tableau contenant divers types de données, y compris une fonction.
Bien qu'il y ait un objet dans cet exemple, la fonction n'est pas dans l'objet.
Si vous remplacez cet objet par une chaîne, la fonction fonctionnera toujours comme prévu.
Je peux appeler la fonction de l'intérieur ou de l'extérieur du tableau.
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]();
Voici la sortie:
whats up!
[ 1, true, 'String', { name: 'trey', age: 43 }, [ 1, 2, 3, 4 ], [Function], undefined ]
whats up!
Fondamentalement, la fonction est un type spécial d’objet en javascript. Et en javascript, dans array vous pouvez tout stocker (pas nécessairement du même type). Donc, par là, oui! vous pouvez stocker une fonction, un objet, des valeurs primitives dans un tableau en javascript.
var arr = ["hello",true,false, 1, {name: "arshad"}, function(){}]
Et vous pouvez mélanger objet et fonction pour créer la fonction nommée comme:
{ callBythisname: function(){ .... }}
Vous pouvez également stocker cet objet dans un tableau
var arr = [{ callBythisname: function(){ .... }}];
Si vous voulez l'appeler, appelez comme ceci:
arr[0].callBythisname();