wake-up-neo.com

Kann ich JavaScript-Funktionen in Arrays speichern?

Wie kann ich Funktionen mit benannten Eigenschaften in einem Array speichern, damit ich sie gerne aufrufen kann

FunctionArray["DoThis"]

oder auch

FunctionArray[integer]

Hinweis: Ich möchte keine eval verwenden.

23
Emre

Wichtig ist, dass Funktionen in JavaScript erstklassige Objekte sind. Sie können sie also als Parameter übergeben, als Objektwerte verwenden und so weiter. Werte in einem Array sind nur ein Beispiel dafür.

Beachten Sie, dass wir die Funktionen nicht in einem Array speichern, obwohl wir dies tun und mit einem numerischen Index darauf zugreifen können. Wir speichern sie in einem regulären Objekt mit dem Namen, mit dem wir auf diese Funktion zugreifen möchten.

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

anrufen als

functions.blah();

oder 

functions["blah"]();
31
Anurag

Sie möchten ein Objektliteral, kein Array.

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

Objekt

x['dothis']()

Sie können auch dynamisch aufrufen

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

Statischer/hartcodierter Aufruf:

x.dothis()

Wenn Sie jedoch ein Array wünschen:

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

sie können das tatsächlich tun, deklarieren Sie es einfach außerhalb des Arrays, wie so ...

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

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

group[ 3 ]

sie können auch ändern, wo es heißt, wenn Sie wollen ...

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

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

group[ 3 ]()

EDIT: Funktionen wurden falsch benannt:/sry

3
Fillipe Ogg

Sie können sogar die Funktion als Namen der Eigenschaft verwenden:

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

Sie können auf die Eigenschaften eines Objekts über dessen Namen (x ["A"]) zugreifen. Wenn Sie Indizes (0 = "A") zuweisen möchten, müssen Sie dies tun. Hier ist ein Beispiel . (Ich bin mir nicht sicher, ob die for-Schleife in jedem Browser funktioniert, ich habe sie mit Firefox getestet, aber Sie können die Idee verstehen.)

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

Sie können Dinge direkt in einem Array speichern, jedoch beispielsweise als Objekt:

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

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

Sie können es hier versuchen .

1
Nick Craver

Hier ist ein Array, das verschiedene Datentypen enthält, einschließlich einer Funktion. 

Obwohl in diesem Beispiel ein Objekt vorhanden ist, befindet sich die Funktion nicht innerhalb des Objekts. 

Wenn Sie dieses Objekt durch eine Zeichenfolge ersetzen, funktioniert die Funktion weiterhin wie geplant.

Ich kann die Funktion innerhalb oder außerhalb des Arrays aufrufen. 

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]();

Hier ist die Ausgabe:

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

Funktion ist im Grunde eine spezielle Art von Objekt in Javascript. Und in Javascript können Sie in Array alles speichern (nicht notwendigerweise vom selben Typ). Also so weiter, ja! Sie können eine Funktion, ein Objekt und eine Grundform in einem Array in Javascript speichern.

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

Sie können Objekt und Funktion mischen, um die benannte Funktion wie folgt zu machen:

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

Sie können dieses Objekt auch in einem Array speichern

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

Wenn Sie es anrufen möchten, rufen Sie wie folgt an:

arr[0].callBythisname();
0
Arshad